如何從文本文件中刪除單個特定行?例如第三行,或任何其他行。我試過這個:刪除文本文件中的特定行?
line = 2
file = File.open(filename, 'r+')
file.each { last_line = file.pos unless file.eof? }
file.seek(last_line, IO::SEEK_SET)
file.close
不幸的是,它什麼也沒做。我嘗試了很多其他解決方案,但沒有任何工作。
如何從文本文件中刪除單個特定行?例如第三行,或任何其他行。我試過這個:刪除文本文件中的特定行?
line = 2
file = File.open(filename, 'r+')
file.each { last_line = file.pos unless file.eof? }
file.seek(last_line, IO::SEEK_SET)
file.close
不幸的是,它什麼也沒做。我嘗試了很多其他解決方案,但沒有任何工作。
我想你不能安全地做到這一點,因爲文件系統的限制。
如果您真的想進行就地編輯,您可以嘗試將其寫入內存,編輯它,然後替換舊文件。但要小心這種方法至少有兩個問題。首先,如果程序在重寫過程中停止,您將得到一個不完整的文件。其次,如果你的文件太大,它會吃掉你的記憶。
file_lines = ''
IO.readlines(your_file).each do |line|
file_lines += line unless <put here your condition for removing the line>
end
<extra string manipulation to file_lines if you wanted>
File.open(your_file, 'w') do |file|
file.puts file_lines
end
東西沿着這些線路應該工作,但使用臨時文件是一個更安全,標準的方法
require 'fileutils'
File.open(output_file, "w") do |out_file|
File.foreach(input_file) do |line|
out_file.puts line unless <put here your condition for removing the line>
end
end
FileUtils.mv(output_file, input_file)
你的條件可以是任何東西,表明它是不需要的行一樣,file_lines += line unless line.chomp == "aaab"
例如,將刪除「aaab」這一行。
我感謝你的工作Doodad,但沒有你的解決方案的工作。它給了我一個錯誤「...未定義的方法'line_to_remove?'對於main:Object ...「是因爲」?「。你能告訴我爲什麼嗎? – bugerrorbug
對不起,line_to_remove?本來應該是一個條件的remotion,我會更新相應的答案 – Doodad
非常感謝!你的解決方案真的幫助我!再次感謝! – bugerrorbug
file.each do |line|
if should_be_deleted(line)
f.seek(-line.length, IO::SEEK_CUR)
f.write(' ' * (line.length - 1))
f.write("\n")
end
end
file.close
File.new(filename).each {|line| p line }
我不明白你的解決方案,你能解釋一下嗎? – bugerrorbug
你能給我一個就地更新的例子嗎? – bugerrorbug
它來自http://stackoverflow.com/a/16638778/170881 –
必須在哪裏? – tokland
「inplace」是什麼意思? – bugerrorbug
您可以修改現有文件(這是一個就地更新)或創建一個新文件。最後一種方法通常是首選,因爲它是非破壞性的。檢查例如'sed'是否帶有'-i'選項。 – tokland