[英]How to delete specific lines in text file?
假設,我有一個input.txt文件,其中包含以下文本:
First line
Second line
Third line
Fourth line
我想刪除,例如,第二行和第四行來得到這個:
First line
Third line
到目前為止,我已設法使用此代碼僅刪除第二行中的一行
require 'fileutils'
File.open('output.txt', 'w') do |out_file|
File.foreach('input.txt') do |line|
out_file.puts line unless line =~ /Second/
end
end
FileUtils.mv('output.txt', 'input.txt')
在Ruby中刪除文本文件中多行的正確方法是什么?
在一般情況下,從文本文件中干凈有效地刪除行是“困難的”,但如果您可以稍微約束問題則可以很簡單。
以下是SO提出的一些類似問題:
還有很多其他的。
在您的情況下,如果您的輸入文件相對較小,您可以輕松地使用您正在使用的方法。 實際上,唯一需要更改以滿足您的標准的是修改輸入文件循環和條件:
File.open('output.txt', 'w') do |out_file|
File.foreach('input.txt').with_index do |line,line_number|
out_file.puts line if line_number.even? # <== line numbers start at 0
end
end
更改是使用with_index
方法捕獲行號,由於File#foreach
在沒有塊的情況下調用時返回Enumerator
,因此可以使用該方法。 該塊現在適用於with_index
,並獲取行號作為第二個塊參數。 只需在比較中使用行號,即可獲得指定的條件。
即使對於稍大的文件,這種方法也會擴展,而將整個文件讀入內存的解決方案對文件大小的上限相當低。 使用此解決方案,您可以更多地受到可用磁盤空間和讀取/寫入文件的速度的限制; 例如,對空間有限的在線存儲執行此操作可能無法滿足您的需求。 寫入本地磁盤或拇指驅動器,假設您有可用空間,應該沒有問題。
使用File.readlines
獲取輸入文件中的行數組。
input_lines = File.readlines('input.txt')
然后只選擇具有偶數索引的那些。
output_lines = input_lines.select.with_index { |_, i| i.even? }
最后,在輸出文件中寫下這些內容。
File.open('output.txt', 'w') do |f|
output_lines.each do |line|
f.write line
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.