6

如何从文本文件中删除单个特定行?例如第三行或任何其他行。我试过这个:

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

我认为由于文件系统的限制,你不能安全地做到这一点。

如果你真的想做一个就地编辑,你可以尝试将它写入内存,编辑它,然后替换旧文件。但请注意,这种方法至少存在两个问题。首先,如果您的程序在重写过程中停止,您将得到一个不完整的文件。其次,如果你的文件太大,它会吃掉你的内存。

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 回答