簡體   English   中英

如何刪除文本文件中的特定行?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM