我有一個非常大的.txt文件,我想寫一個ruby腳本來過濾一些數據。基本上我想遍歷每一行,然後將單個單詞存儲在一個數組中的行中,然後對這些單詞進行操作。然而我無法將每個單詞分開排列在一個陣列中遍歷數組中的每個字
tracker_file.each_line do|line|
arr = "#{line}"
我可以得到像這樣的整行,但單個單詞怎麼樣?
謝謝
我有一個非常大的.txt文件,我想寫一個ruby腳本來過濾一些數據。基本上我想遍歷每一行,然後將單個單詞存儲在一個數組中的行中,然後對這些單詞進行操作。然而我無法將每個單詞分開排列在一個陣列中遍歷數組中的每個字
tracker_file.each_line do|line|
arr = "#{line}"
我可以得到像這樣的整行,但單個單詞怎麼樣?
謝謝
對字符串使用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
你可以這樣做:
tracker_file.each_line do |line|
arr = line.split
# Then perform operations on the array
end
的split
方法將帶分隔符的一個字符串分割成一個數組,在這種情況下,空間。
如果你正在閱讀的東西寫在英語和文本可能包含連字符,分號,空格,句號等,你可能會考慮一個正則表達式,如下列:
/[a-zA-Z]+(\-[a-zA-Z]+)*/
提取改爲單詞。
您不必使用IO#each_line
,你也可以使用IO#each(separator_string)
另一種選擇是使用IO#gets
:
while word = tracker_file.gets(/separator_regexp/)
# use the word
end
tracker_file.each_line do |line|
line.scan(/[\w']+/) do |word|
...
end
end
如果沒有需要遍歷行,你可以直接迭代單詞:
tracker_file.read.scan(/[\w']+/) do |word|
...
end