2017-04-26 39 views
-1

我花了幾個小時的谷歌搜索,但找不到確切的答案。如果行包含單詞,請將行放入變量

我想要搜索多行文本文件,並且如果一行包含'dog',請將該行放入一個變量中。

這裏是我的代碼:

if File.foreach('textfile.txt').grep(/dog/) 

我想的下一行代碼把含有'dog'行成變量wordline

我也可以搜索多個方面,而不是隻有一個,即:

if File.foreach('textfile.txt').grep(/cat|dog/) 

我意識到它也可能以不同的方式完成的,是這樣的:

wordline=File.foreach('textile.txt').grep(/dog/) 

,但我不不知道該內聯版本的語法。

編輯:這是我的第一篇文章,我是一個總的紅寶石newb ..我在我的帖子中提到。但是有人編輯了所有那些在我的帖子中投票的投票。在發佈之前,我確實閱讀了常見問題解答,因此下次可能會對可能採取的行動做出解釋。

+0

作爲一個提示'grep'總是返回一個數組,並且數組甚至是空的,總是邏輯上爲真。這個'如果'永遠不會失敗。 – tadman

回答

0

這裏的總體思路是:

matching = File.readlines('text.txt').grep(/dog|cat/) 

或者更一般地說:

terms = %w[ dog cat ] 

matching = File.readlines('text.txt').grep(Regexp.union(terms)) 

由於matching是可以參考的元素在裏面像matching[0]matching.first或迭代必要時數組與.each。將第一個匹配分配給一個變量:

first_match = matching.first 
+0

謝謝,這是我想要的語法。我的測試工作,我得到了包含要求的單詞的行。不過,看起來這個文件的行數在開始的時候就沒有了。最後有時\ n。 有沒有辦法使用相同的單行語法刪除這些\ t \ n字符?即,使它的功能如下: matching = File.readlines('text.txt')。grep(/ dog | cat /)刪除'\ n'和'\ t' 或者我可能只是有從「匹配」中創建第二個變量,剝離製表符和換行符 – Bman70

+0

您可以刪除像File.readlines(...)這樣的換行符。map {| s | s.gsub(/ \ s + /,'')}'去掉任何空格,製表符或換行符。您也可以根據需要保持鏈接。 – tadman

+0

這使得行不可讀,儘管單詞之間的空格消失了。我可以使用.map {| s | s.gsub(/ \ t \ n /,'')}只需取出換行符和製表符? – Bman70

相關問題