Ruby - 将文件解析为哈希

Ruby - Parse a file into hash

我有一个包含数百个对象和值组合的文件,如下所示。我想从用户那里获取输入作为对象名称和数值以及 return 该关联值。

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

例如- 输入 -

           objectName = 'cefcModuleOperStatus'

           TypeNumber = '4'

Return - 'okButDiagFailed'

我不知道 Ruby 并完成此操作以帮助我的同伴。所以如果这是一个新手问题,请原谅。

注意:- 我必须创建文件,所以使用任何文件格式都会有很大帮助。

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

这里是repl.it of complete working example。只需 select 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 代码。

希望对您有所帮助,如果您对它的工作原理还有其他疑问,请告诉我。