我想在下面添加换行符。 但结果是错误的。 教我什么是错的。
的test.txt(前)
------------------
2014-09
2014-10
2014-11
------------------
的test.txt(后)
------------------
2014-09
2014-10
2014-11
------------------
我在下面制作了一个ruby脚本,但结果是错误的。
f = File.open("test.txt","r+")
f.each{|line|
if line.include?("2014-10")
f.puts nil
end
}
f.close
结果
------------------
2014-09
2014-10
014-11
------------------
答案 0 :(得分:2)
要解决您的问题,最简单的方法是创建一个新文件以输出新文本。为此,您需要打开输入文件和输出文件并迭代文件的每一行检查条件并将所需的行放入输出文件中。
实施例
require 'fileutils'
File.open("text-output.txt", "w") do |output|
File.foreach("text.txt") do |line|
if line.include?("2014-10")
output.puts line + "\n"
else
output.puts line
end
end
end
FileUtils.mv("text-output.txt", "text.txt")
简单方法
File.write(f = "text.txt", File.read(f).gsub(/2014-10/,"2014-10\n"))
答案 1 :(得分:1)
同时读取和写入文件可能会变得混乱,与数组等其他数据结构相同。您应该随身携带一个新文件。
一些注意事项:
File.open
的阻止形式,因为它会阻止您忘记致电f.close
puts nil
与puts
无参数do ... end
代替{ ... }
进行多行块File.open(...).each
可以替换为File.foreach
StringIO
对象中,该对象将响应puts
等。示例:
require 'stringio'
file = 'test.txt'
output = StringIO.new
File.foreach(file) do |line|
if line.include? '2014-10'
output.puts
else
output << line
end
end
output.rewind
File.open(file, 'w') do |f|
f.write output.read
end