2011-05-06 64 views
2

我有一個非常大的.txt文件,我想寫一個ruby腳本來過濾一些數據。基本上我想遍歷每一行,然後將單個單詞存儲在一個數組中的行中,然後對這些單詞進行操作。然而我無法將每個單詞分開排列在一個陣列中遍歷數組中的每個字

tracker_file.each_line do|line| 
arr = "#{line}" 

我可以得到像這樣的整行,但單個單詞怎麼樣?

謝謝

回答

3

對字符串使用split方法。

irb(main):001:0> line = "one two three" 
=> "one two three" 
irb(main):002:0> line.split 
=> ["one", "two", "three"] 

所以,你的例子是:

tracker_file.each_line do |line| 
    arr = line.split 
    # ... do stuff with arr 
end 
0

你可以這樣做:

tracker_file.each_line do |line| 
    arr = line.split 
# Then perform operations on the array 
end 

split方法將帶分隔符的一個字符串分割成一個數組,在這種情況下,空間。

0

如果你正在閱讀的東西寫在英語和文本可能包含連字符,分號,空格,句號等,你可能會考慮一個正則表達式,如下列:

/[a-zA-Z]+(\-[a-zA-Z]+)*/ 

提取改爲單詞。

0

您不必使用IO#each_line,你也可以使用IO#each(separator_string)

另一種選擇是使用IO#gets

while word = tracker_file.gets(/separator_regexp/) 
    # use the word 
end 
3
tracker_file.each_line do |line| 
    line.scan(/[\w']+/) do |word| 
    ... 
    end 
end 

如果沒有需要遍歷行,你可以直接迭代單詞:

tracker_file.read.scan(/[\w']+/) do |word| 
    ... 
end