6

テキスト ファイルから特定の 1 行を削除するにはどうすればよいですか? たとえば、3 行目、またはその他の行です。私はこれを試しました:

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

残念ながら、それは何もしません。他の多くのソリューションを試しましたが、何も機能しません。

4

1 に答える 1

9

ファイルシステムの制限により、安全に行うことはできないと思います。

本当にその場で編集したい場合は、それをメモリに書き込んで編集し、古いファイルを置き換えることができます。ただし、このアプローチには少なくとも 2 つの問題があることに注意してください。まず、プログラムが書き換えの途中で停止すると、不完全なファイルが得られます。第 2 に、ファイルが大きすぎると、メモリが消費されます。

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」という行を削除するなど、不要な行であることを示すものであれば何でもかまいません。

于 2013-07-14T12:11:31.180 に答える