我正在编写一个相当简单的Ruby脚本,它遵循以下过程:
前两个已经完成,并且它们运作得相当好。
我的问题在于第三部分。为了让我的脚本记住最后一次处理,我将其写入文本文件:
file = File.read('./Formating/Items.json')
last_key = File.open('./last.txt', 'r')
l = last_key.first(1)
data = JSON.parse(file)
puts l
data.each_with_index do |item, index|
stuff.do(item)
last_key.truncate(0)
last_key.write(index.to_s)
end
当我使用truncate
命令和write
命令时,会出现问题。
不是从文件中删除所有内容并将新id添加为纯文本,而是在HEX中添加新ID。
如果我单独使用truncate
,它就会起作用。如果我单独使用write
它将起作用。当我一起使用它们时,我得到HEX输出。
当我正在读取文件时,它将HEX代码转换为UTF字符串,我可以保留它,但是,它不是删除HEX内容,而是在最后添加新id,使文件更大。 / p>
我有什么方法可以解决它吗?
答案 0 :(得分:1)
我认为问题在于您正在截断当前打开的文件。
快速盲目未经测试的修复,必须有效:
file = File.read('./Formating/Items.json')
last_key = File.read('./last.txt').to_i rescue 0
data = JSON.parse(file)
puts "Last key is: #{last_key}"
data.each_with_index do |item, index|
next if index <= last_key # skip already processed
# or: data.drop(last_key).each_with_index do |item, index|
stuff.do(item)
File.write('./last.txt', index.to_s)
end