如何在文件中添加新行

时间:2014-11-03 07:06:24

标签: ruby

我想在下面添加换行符。 但结果是错误的。 教我什么是错的。

的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
------------------

2 个答案:

答案 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 nilputs无参数
  • 相同
  • 当您不需要字符串插值时,单引号优于双引号
  • 您应该使用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