我尝试使用ruby从散列中编写一个yaml文件。并且我能够创建yaml文件。
程序只是我试图创建的一个报告。但真正的问题是,它只适用于一次约会。当我试图在第一天运行时,它的工作完美(yaml文件被正确创建),但是当我试图在另一个日期运行时,yaml文件中的值被覆盖,但实际上我想在yaml中添加新值和前一个值。
我知道我的英语不好,有时有点缺乏创建逻辑。请帮我改正这个问题。代码在
下面def write_monthly_yaml_file(daily_data)
@daily = File.exist?(@monthly_yaml_file) ? YAML::load_file(@monthly_yaml_file) : Hash.new
@daily[Time.parse(@date).strftime("%m")] = daily_data
File.open(@monthly_yaml_file, "w") {|f| f.puts @daily.to_yaml}
end
这里的daily_data是哈希值,请任何人帮助我添加新的daily_data与旧的(我需要添加每个值与前一个值,如求和)
谢谢
我假设您想在一个月内有许多条目:
# the line below overwrites the value for the key given
# @daily[Time.parse(@date).strftime("%m")] = daily_data
# will collect all data in an array instead:
(@daily[Time.parse(@date).strftime("%m")] ||= []) << daily_data
在这里,我们创建一个数组作为一个值,除非它存在,并且将添加到daily_data
值。要使此代码成功运行,请从磁盘中删除现有的yaml文件。
原因是当前有一个daily_data
实例与键相关联,并且接口发生了变化。
如果@daily[day]中的数据是您想要添加的数字,请尝试:
@daily = File.exist?(@monthly_yaml_file) ?
YAML::load_file(@monthly_yaml_file) : Hash.new
day = Time.parse(@date).strftime("%m")
@daily[day] = (@daily[day] + daily_data)
File.open(@monthly_yaml_file, "w") {|f| f.puts @daily.to_yaml}