1

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

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'

返回 - 'okButDiagFailed'

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

注意:- 我必须创建文件,因此对于任何文件格式都会有很大帮助。

4

1 回答 1

5

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

这是完整工作示例的repl.it。只需选择main.rb文件并点击运行!

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

数据.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​​ 代码。

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

于 2017-04-12T06:35:18.213 回答