如何在文件中编写UTF-8而不是hex

时间:2016-07-11 14:49:57

标签: ruby

我正在编写一个相当简单的Ruby脚本,它遵循以下过程:

  1. 从JSON列表中加载500个项目
  2. 为每个人提出GET请求并处理数据
  3. 如果脚本退出(由于某些原因),请记住最后处理的项目
  4. 前两个已经完成,并且它们运作得相当好。

    我的问题在于第三部分。为了让我的脚本记住最后一次处理,我将其写入文本文件:

    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>

    我有什么方法可以解决它吗?

1 个答案:

答案 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