如何从文本文件中删除单个特定行?例如第三行或任何其他行。我试过这个:
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
不幸的是,它什么也没做。我尝试了很多其他解决方案,但没有任何效果。
答案 0 :(得分: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”行。
答案 1 :(得分:-2)
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 }