2016-03-15 3 views
-2

Я пытаюсь взять строку из одного массива и заменить определенную ее часть на строку из другого массива. Bcards_array - это первый массив, а часть, которую я хочу заменить, - это «_______» с полным элементом из Wcard_array. я в настоящее время:Как заменить часть строки, взятой из массива

# (the array as a block of text, with each desired element separated by <>) 
Wcards_array = Wcards.split("<>") 

Wcards_array исходной строки здесь: http://www.cardsagainsthumanity.com/wcards.txt

def random_items(array) 
     array.sample(1 + rand(array.count)) 
    end 

Wcard_answer = Wcards_array.sample(1) 

Bcard_answer = Bcards_array.sample(1) 
Bcard_answer = Bcard_answer.split(" ") 
Bcard_answer = Bcard_answer.map! { |element| 
    if(element == "__________") 
     "#{Wcard_answer}" 
    end 
} 

В настоящее время я получаю обратно ошибку Нет методы для разделения, несмотря на использование его ранее

Wcards связана в комментариях

+0

Было бы полезно посмотреть, что такое 'Wcards' или подобное. –

+0

Его только одна длинная строка, много фраз, разделенных символом <> 's Это ссылка, если вы действительно этого хотите http://www.cardsagainsthumanity.com/wcards.txt –

+0

Вам, вероятно, лучше разместить такую ​​примерную строку в вопрос tbh. Это не мой dv btw. –

ответ

0

Пойдем немного через это:

Wcard_answer = Wcards_array.sample(1) 

Wcards_array - это массив, и вы хотите получить из него случайный элемент и сохранить его в Wcard_answer, предположительно, вы получите класс строк обратно.

Bcard_answer = Bcards_array.sample(1) 

То же, за исключением Bcards_array.

Bcard_answer = Bcard_answer.split(" ") 

Теперь вы говорите, что собираетесь преобразовать ответ с Bcards в массив, разделенный пробелами. Предположительно Bcard_answer выглядит примерно так: «Сначала тестирование одного _____».

Если вы просто хотите заменить строку подчеркивания в выбранном элементе массива, цикл отображения не нужен. Вот сокращенный пример:

rep = '__' 
ba = ['Testing __', 'More Testing __'] 
ws = 'one<>two<>three' 
wa = ws.split('<>') 

answ = wa.sample 
ansb = ba.sample.gsub(rep, wa.sample) 

Забегая несколько раз, мы видим, рандомизированное результат:

irb(main):007:0> ansb = ba.sample.gsub(rep, wa.sample) 
=> "Testing one" 
irb(main):008:0> ansb = ba.sample.gsub(rep, wa.sample) 
=> "More Testing one" 
irb(main):009:0> ansb = ba.sample.gsub(rep, wa.sample) 
=> "Testing one" 
irb(main):010:0> ansb = ba.sample.gsub(rep, wa.sample) 
=> "Testing one" 
irb(main):011:0> ansb = ba.sample.gsub(rep, wa.sample) 
=> "Testing three" 
+0

Понял меня немного, чтобы понять ваши переменные, но это достигло результата, который я хотел! 'Wcard_answer = Wcards_array.sample Bcard_answer = Bcards_array.sample.gsub (blank, Wcard_answer) ставит Bcard_answer' то, что у меня закончилось с –

0

попробовать что-то вроде этого:

Wcards = 'some<>words<>yes<>no' 
Wcards_array = Wcards.split("<>") 

Wcard_answer = Wcards_array.sample 
Bcards_array = ['1','2','3',"hello mate _____",'5'] 
Bcards_array.map! { |s| s.include?("_____") ? s.gsub(/_____/,Wcard_answer) : s } 
+0

, моя проблема в том, что« __________ »находится в пределах более длинных строк, и я хочу только заменить" __________ "не вся строка, например. (привет, меня зовут ______). Я хочу изменить (привет, меня зовут Джим). –

+0

@ShaunRattue обновил мой ответ. –

0

К сожалению, я не видел текстовую ссылку, которую вы опубликовали, до тех пор, пока я не отправил свой предыдущий ответ. Вот что вы можете сделать, если это то, что вы пытаетесь сделать.

require 'net/http' 

bcard_http = 'http://cardsagainsthumanity.com/bcards.txt' 
wcard_http = 'http://cardsagainsthumanity.com/wcards.txt' 

bcard_array = Net::HTTP.get_response(URI.parse(bcard_http)).body.split('<>') 
wcard_array = Net::HTTP.get_response(URI.parse(wcard_http)).body.split('<>') 

printf("%s\n", bcard_array.sample.gsub('_' * 10, wcard_array.sample)) 
Смежные вопросы