首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Ruby中将字符串解析为哈希表

如何在Ruby中将字符串解析为哈希表
EN

Stack Overflow用户
提问于 2019-03-23 21:01:09
回答 1查看 232关注 0票数 2

我从远程设备获取字符串形式的数据。我需要解析数据。数据通常是这样的:

代码语言:javascript
复制
MO                SCGR  SC         RSITE           ALARM_SITUATION
RXOTG-59            59  0          EK0322          ABIS PATH FAULT
RXOCF-59                           EK0322          LOCAL MODE
RXOTRX-59-0         4              EK0322          LOCAL MODE
RXOTRX-59-1                        EK0322          LOCAL MODE
RXOTRX-59-4             0          EK0322          LOCAL MODE
RXOTRX-59-5         1   3          EK0322          LOCAL MODE
RXOTRX-59-8                        EK0322          LOCAL MODE
RXOTRX-59-9                        EK0322          LOCAL MODE

我喜欢将数据作为数组的数组或任何其他编程上合理的结构。

我使用以下命令将数据拆分到数组中:

代码语言:javascript
复制
str.split("\r\n")

然后使用以下命令删除数组中每个元素上的额外空间:

代码语言:javascript
复制
tsgs.map! {|tsg| tsg.gsub(/\s+/, " ").split(" ") }

但这有其局限性,因为不考虑空单元格。我希望数组包含5个元素,但它包含的元素不到5个。

案例1:在这种情况下,我得到了预期的结果:

代码语言:javascript
复制
RXOTG-59            59  0          EK0322          ABIS PATH FAULT

转换为

代码语言:javascript
复制
["RXOTG-59", "59", "0", "EK0322", "ABIS PATH FAULT"]

案例2:在这种情况下,我得到了一个意外的结果:

代码语言:javascript
复制
RXOTRX-59-9                        EK0322          LOCAL MODE

转换为

代码语言:javascript
复制
["RXOTRX-59-9", "EK0322", "LOCAL MODE"]
代码语言:javascript
复制
   def getCommandResult(tgdatas)
        tgdatas_arr = tgdatas.split("\r\n")
        tsgs = tgdatas_arr[5..tgdatas_arr.index("END")-2]
        tsgs.map! {|tsg| tsg.gsub(/\s+/, " ").split(" ")[0] }
        return tsgs
    end
EN

回答 1

Stack Overflow用户

发布于 2019-03-23 23:33:13

带有指令"A“的String.unpack非常适合固定宽度的字符串。

代码语言:javascript
复制
str = "RXOTRX-59-9                        EK0322          LOCAL MODE"
p str.unpack("A20A4A11A16A15" ) # => ["RXOTRX-59-9", "", "", "EK0322", "LOCAL MODE"]
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55313981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档