Ruby:覆盖文件中的行
Ruby: overwrite line in file
我正在尝试使用 ruby 中的标准文件 i/o 将一些状态记录到文件中。该文件将只有一行,其中包含一个数字。我想在行中阅读,然后在循环的每次迭代中我想更新这个数字。
我知道我可以使用
读取文件
file = File.open('out.log', 'a+')
num = file.readline
问题是,我不知道如何覆盖循环中的第一行,而不是每次迭代都重新打开文件,即
file = File.open('out.log', 'w')
这将创建一个空文件
无需每次都打开:
file = File.open('out.log', File::RDWR)
10.times do |i|
file.seek(0) # rewind to the beginning of the file (line in your case)
file.write("iteration #{i}") # write what you want
# the following is just in order to show what was written
file.seek(0)
puts file.readline
end
file.close
您可以使用 IO::open
with block 来关闭文件,当 block 自动退出时。
File.open("#{__dir__}/test.txt", File::RDWR) do |file|
10.times do |i|
file.rewind
file.puts("iteration #{i}")
end
end
puts File.read("#{__dir__}/test.txt")
# >> iteration 9
我正在尝试使用 ruby 中的标准文件 i/o 将一些状态记录到文件中。该文件将只有一行,其中包含一个数字。我想在行中阅读,然后在循环的每次迭代中我想更新这个数字。
我知道我可以使用
读取文件file = File.open('out.log', 'a+')
num = file.readline
问题是,我不知道如何覆盖循环中的第一行,而不是每次迭代都重新打开文件,即
file = File.open('out.log', 'w')
这将创建一个空文件
无需每次都打开:
file = File.open('out.log', File::RDWR)
10.times do |i|
file.seek(0) # rewind to the beginning of the file (line in your case)
file.write("iteration #{i}") # write what you want
# the following is just in order to show what was written
file.seek(0)
puts file.readline
end
file.close
您可以使用 IO::open
with block 来关闭文件,当 block 自动退出时。
File.open("#{__dir__}/test.txt", File::RDWR) do |file|
10.times do |i|
file.rewind
file.puts("iteration #{i}")
end
end
puts File.read("#{__dir__}/test.txt")
# >> iteration 9