【问题标题】:How do I print the values of hashsets that are saved in a file in ruby如何打印保存在 ruby​​ 文件中的哈希集的值
【发布时间】:2014-07-21 01:44:28
【问题描述】:

我有一个文件(名为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"}

我想打印哈希集的值。我尝试了以下方法,但出现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

【问题讨论】:

  • 这个问题似乎离题了,因为它表明了对正在解决的问题的最低限度的理解。

标签: ruby file hash


【解决方案1】:

您不应该以这种方式保存数据。这是使用 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')

【讨论】:

  • 我要补充两点:将你的数据放入文件中,使用File.open("ter.txt", "w") {|f| f << hsh.to_yaml },读取它,你可以使用YAML.load_file("ter.txt")
【解决方案2】:

我首先将您的数据保存在一个名为 test.rb 的文件中。我打开文件,读取每一行并将所有=> 替换为:,使其成为json 字符串。然后使用JSON::parse方法将每一行json字符串转换为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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2013-09-30
    • 1970-01-01
    • 2015-11-15
    相关资源
    最近更新 更多