我想要一個文本文件foo.txt,它是一個10位數字列表,每個都在他們自己的行上。如果一個數字符合某一組參數,我希望將該行寫入bar.txt。閱讀一個文本文件並寫入Ruby中的另一個文本文件
什麼是一個簡單的方法來直接做Ruby?我是新來的文件解析在Ruby中,只需要一點幫助開始。
我想要一個文本文件foo.txt,它是一個10位數字列表,每個都在他們自己的行上。如果一個數字符合某一組參數,我希望將該行寫入bar.txt。閱讀一個文本文件並寫入Ruby中的另一個文本文件
什麼是一個簡單的方法來直接做Ruby?我是新來的文件解析在Ruby中,只需要一點幫助開始。
對不起,我無法抗拒代碼高爾夫在這裏。
指定的文件foo.txt的,看起來像這樣:
3588888932
4783748387
3434934343
4344232322
4343343439
1111132333
可以讀取這個文件,並輸出到標準輸出包含數字9與下面的命令行咒語所有行:
$ ruby -e 'ARGF.each {|line| puts line if line =~ /9/}' < foo.txt
此輸出
3588888932
3434934343
4343343439
當然,如果你需要寫另一個文件,你可以說
$ ruby -e 'ARGF.each {|line| puts line if line =~ /9/}' <foo.txt> bar.txt
一般情況下,從一個文件中的行過濾的東西是最好的通過標準輸入完成(這裏我用ARGF
),但它當然也可以使用的情況下,Ruby的文件的方法這個任務需要作爲更大的Ruby應用程序的一部分來執行。
常見的做法是在這裏
File.open("foo.txt", "r") do |f|
while (line = f.gets)
puts line if line =~ /9/
end
end
這個寫到標準輸出,所以寫信給bar.txt
您可以重定向。這裏關於Ruby的一個好處是,該文件,因爲它是一個塊參數,當該塊退出時它會自動關閉。
您也可以通過在塊內打開文件來寫入文件。要讀取foo.txt並寫入bar.txt,請參閱Paul的答案。
在應用程序中,你可以做一些事情,像這樣:
File.open("output.txt", "w") do |out|
IO.readlines("input.txt").each do |line|
if (line =~ /^1/)
out.puts(line)
end
end
end
如果你想爲你做的輸出,你可以使用,而不是「W」,「R」來打開輸入。
readlines方法會一次讀入整個文件,所以對於大文件,這不是最好的想法,但對於小文件來說,這不是什麼大不了的事,而且很容易。請注意塊如何照顧爲您關閉手柄。