2011-09-07 73 views
1

我想要一個文本文件foo.txt,它是一個10位數字列表,每個都在他們自己的行上。如果一個數字符合某一組參數,我希望將該行寫入bar.txt。閱讀一個文本文件並寫入Ruby中的另一個文本文件

什麼是一個簡單的方法來直接做Ruby?我是新來的文件解析在Ruby中,只需要一點幫助開始。

回答

2

對不起,我無法抗拒代碼高爾夫在這裏。

指定的文件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的答案。

2

在應用程序中,你可以做一些事情,像這樣:

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方法會一次讀入整個文件,所以對於大文件,這不是最好的想法,但對於小文件來說,這不是什麼大不了的事,而且很容易。請注意塊如何照顧爲您關閉手柄。

相關問題