1)我正在尝试从data.txt中读取字符串
Christopher Plummer;Dec 13, 1927
Christopher Walken;Mar 31, 1943
The King of Spain;Jan 5, 1938
2)将所有字符串拆分为';'并将它们转换为哈希
3)散列到YAML
4)将YAML写入文件
问题:将YAML写入文件仅生成最后一行
data = Hash.new
require 'yaml'
filename = 'Ydata.txt'
File.read('Data.txt').each_line do |line|
line = line.chomp
line = line.split ';'
data = { "#{line[0]}" => "#{line[1]}" }.to_yaml
end
File.open filename, 'w' do |f|
f.write data
end
答案 0 :(得分:0)
此行将data
设置为转换为yaml的最后一个值。所以它完全取代了每个循环。
data = { "#{line[0]}" => "#{line[1]}" }.to_yaml
更好的是......
data = {}
File.read('Data.txt').each_line do |line|
line = line.chomp
line = line.split ';'
data[line[0]] = line[1]
end
File.open filename, 'w' do |f|
f.write data.to_yaml
end
或者,如果要将每个项目单独写入filename
文件,则可以打开输出文件并在输出文件块中的循环中执行File.read
...
File.open filename, 'w' do |f|
File.read('Data.txt').each_line do |line|
line = line.chomp
line = line.split ';'
data = { "#{line[0]}" => "#{line[1]}" }.to_yaml
f.write data.to_yml
end
end
答案 1 :(得分:-1)
看起来你在每次迭代中都覆盖data
,只有一个条目的新YAML字符串。这就是为什么你只看到最后一行。尝试构建完整的ruby哈希,并在最后将整个哈希转换为YAML。像这样:
require 'yaml'
data = Hash.new
File.read('Data.txt').each_line do |line|
k, v = line.chomp.split(';', 2)
data[k] = v
end
File.open('Ydata.txt', 'w') do |f|
f.write(data.to_yaml)
end