如何在ruby中打印保存在文件中的哈希集的值

时间:2014-05-31 10:48:29

标签: ruby file hash

我有一个包含hashsets内容的文件(名为ter.txt),如下所示:

{"qty"=>"gfg", "unit"=>"gfg", "item"=>"xcv", "cost"=>"0.0", "salestax"=>"0.0"}
{"qty"=>"gdf", "unit"=>"g", "item"=>"gg", "cost"=>"0.0", "salestax"=>"0.0"}

我想打印hashsets的值。我尝试了以下但是我收到了undefined local variable or method 'item'

的错误
file = File.open('ter.txt', 'r').map { |line| line.split("\n")[0] }
file.each do |hash|
    p hash
    p " #{hash[item]}"
end

2 个答案:

答案 0 :(得分:0)

您不应该以这种方式保存数据。这是使用YAML的完美案例。写下你的文件:

---
- qty: gfg
  unit: gfg
  item: xcv
  cost: 0.0
  salestax: 0.0
- qty: gdf
  unit: g
  item: gg
  cost: 0.0
  salestax: 0.0

然后你可以用:

加载它
require 'yaml'
data = YAML.load(File.read 'ter.txt')

答案 1 :(得分:0)

我首先将您的数据保存在名为 test.rb 的文件中。我打开了文件,读取了每一行并将所有=>替换为:,将其作为 json字符串。然后使用JSON::parse方法将 json string 的每一行转换为Hash对象。以下是我为解决您的问题而编写的代码: -

require 'json'

File.foreach("#{__dir__}/test.txt") do |line|
  p JSON.parse(line.strip.gsub("=>", ":")).values
end

现在我从命令提示符运行代码并获得您正在寻找的输出: -

arup@linux-wzza:~/Ruby> ruby -vw test.rb
ruby 2.0.0p451 (2014-02-24 revision 45167) [i686-linux]
["gfg", "gfg", "xcv", "0.0", "0.0"]
["gdf", "g", "gg", "0.0", "0.0"]
arup@linux-wzza:~/Ruby>