2015-02-10 4 views
0

Я хочу прочитать файл и создать массив твиттер-ручек. Файл представляет собой случайный набор трендовых твитов, фрагмент будет:Использование .match() внутри блока

@David_Cameron @britishchambers #BCCConf Mention of pay rises in the NHS. But what about all the redundancies to enable these pay rises?

в этом случае код должен возвращать

["@David_Cameron", "@britishchambers"] 

Размещение /@\w+/.match(word)[0] работ в IRB, но как только я положил его в кадр с each или map:

def read_file(file_path) 
    text = File.open(file_path, 'r'){ |f| f.read}.split(" ") 
    text.each{|word| /@\w+/.match(word)[0] } 
end 

я получаю ошибку:

NoMethodError: undefined method `[]' for nil:NilClass 

Что я делаю неправильно? Кроме того, если я могу сделать это внутри блока file.open, это было бы предпочтительнее.

+0

Просьба указать образец ввода и вывода. – daremkd

+0

@Emily Вы должны обновить вопрос, а не набивать материал комментариями. –

+0

Вы должны принять ответ, если хотя бы один из них имеет значение. Тем не менее, нет никакой спешки, чтобы сделать это. Выбор ответа слишком быстро может препятствовать другим ответам, и это любезность дать людям время, чтобы заполнить там ответы до того, как они будут выбраны. Многие члены SO ждут, по крайней мере, несколько часов, прежде чем сделать выбор. Когда придет время сделать выбор, выберите тот, который вы найдете наиболее полезным. –

ответ

0
def read_file(file_path) 
    text = File.read(file_path) 
    text.scan(/@\w+/).flatten 
end 

Прочитайте файл, а затем использовать #scan, чтобы извлечь все случаи.

+0

Это почти работает Симоне, но она возвращает текст без символа @, который мне все еще нужен. Просто попробовал это без круглых скобок, и он работает. Благодаря! – Emily

1

What am I doing wrong?

Размещая [] после /@\w+/.match(word), вы предполагаем, что word всегда соответствует /@\w+/, тем самым возвращая MatchData объект, который не является истинным. Например, #BCCConf, не соответствует /@\w+/, и в этом случае /@\w+/.match(word) - nil. [] не определен на nil.

Смежные вопросы