Ruby - 将文件解析为哈希

时间:2017-04-12 06:17:24

标签: ruby dictionary ruby-hash

我有一个包含数百个对象和值组合的文件,如下所示。我希望得到用户的输入作为对象名称&数值并返回相关值。

Object  cefcFRUPowerOperStatus
Type    PowerOperType 
        1:offEnvOther
        2:on
        3:offAdmin
        4:offDenied
        5:offEnvPower
        6:offEnvTemp

Object  cefcModuleOperStatus
Type    ModuleOperType 
        1:unknown
        2:ok
        3:disabled
        4:okButDiagFailed
        5:boot
        6:selfTest

E.g。 - 输入 -

           objectName = 'cefcModuleOperStatus'

           TypeNumber = '4'

返回 - 'okButDiagFailed'

我不知道Ruby并且完成了这项工作来帮助我的同行。如果这是一个新手问题,请原谅。

注意: - 我要用任何文件格式创建文件,这将是一个很好的帮助。

1 个答案:

答案 0 :(得分:5)

如果您说您可以控制创建原始数据文件,那么以json格式创建它将使访问变得微不足道。

这是repl.it of complete working example。只需选择main.rb文件并点击运行!

例如,如果您创建json文件,如:

  

data.json

{
  "cefcFRUPowerOperStatus": {
    "type": "PowerOperType",
    "status": {
      "1": "offEnvOther",
      "2": "on",
      "3": "offAdmin",
      "4": "offDenied",
      "5": "offEnvPower",
      "6": "offEnvTemp"
    }
  },
  "cefcModuleOperStatus": {
    "type": "ModuleOperType",
    "status": {
      "1": "unknown",
      "2": "ok",
      "3": "disabled",
      "4": "okButDiagFailed",
      "5": "boot",
      "6": "selfTest"
    }
  }
}

然后解析它并在Ruby中访问它就像:

require 'json'
file = File.read('data.json')
data = JSON.parse(file)

#accessing this data is simple now:

puts data["cefcModuleOperStatus"]["status"]["4"]
# > okButDiagFailed

注意:如果您的状态是唯一的,则此JSON格式将起作用。如果不是,您仍然可以使用这种方式,但是您需要将JSON转换为数组格式。让我知道是否是这种情况,我可以告诉你如何修改json和ruby代码。

希望有所帮助,如果您对此如何运作有进一步的疑问,请与我们联系。