2016-12-07 79 views
1

我正在創建一個將用戶存儲在文本文件中的程序,並且希望根據關鍵字刪除/修改一行。這是我的代碼,現在搜索的關鍵詞,這反過來將打印包含關鍵字的整條生產線:在基於關鍵字的文本文件中刪除一行在RUBY

 keyword = File.readlines('skier_info.txt') 
     matches = keyword.select { |name| name[/#{search}/i] } 

我不知道我該如何使用代碼這個小位寫從每一行將文本文件轉換爲新文件,除了我從「匹配」變量中獲得的一行外。

回答

0

通過修改基因的從你的代碼量最少的:

keyword = File.readlines('skier_info.txt') 
no_matches = keyword.reject { |name| name[/#{search}/i] } 

File.open('new_skier_info.txt','w+'){|out| out.puts no_matches} 

rejectselect相反:

(1..10).reject{|x| x.even?} 
=> [1, 3, 5, 7, 9] 

如果你的輸入文件是大,你不想讀它所有內存:

File.open('new_skier_info.txt','w+') do |out| 
    File.foreach('skier_info.txt') do |line| 
    out.puts line unless line =~ /#{search}/i 
    end 
end 

您也可以使用grep -v在終端;)

+1

當沒必要的時候將整個文件讀入內存有點不幸。 –

1

因此,您可以確定要刪除的行嗎?這是70%的工作。差不多了!

現在,您只需創建一個新文件並從現有文件中寫入所有行,除了您不需要的文件外。寫完新文件後,可以將其複製到舊文件中。

+0

感謝您的回覆塞爾吉奧!我對Ruby很新,所以我不知道如何做到這一點...你能幫我多一點嗎?:) –

+0

@VetleOttemFrantzvaag:新的不是沒有使用搜索的藉口。看看這一個:http://stackoverflow.com/questions/2777802/how-to-write-to-file-in-ruby –

+0

糟糕的配方由我。我的問題是不寫一個文件,但我會如何去選擇文件中的每一行,除了我搜索的那一行。 –

相關問題