我正在从远程设备获取字符串形式的数据。我需要解析数据。数据通常是这样的:
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
我喜欢将数据作为数组的数组或任何其他编程合理的结构。
我使用以下方法将数据拆分为一个数组:
str.split("\r\n")
然后删除数组中每个元素的多余空间:
tsgs.map! {|tsg| tsg.gsub(/\s+/, " ").split(" ") }
但这有局限性,因为不考虑空单元格。我希望数组包含五个元素,但实际包含的元素少于五个。
情况1:在这种情况下,我得到了预期的结果:
RXOTG-59 59 0 EK0322 ABIS PATH FAULT
转换为
["RXOTG-59", "59", "0", "EK0322", "ABIS PATH FAULT"]
情况 2:在这种情况下,我得到了意想不到的结果:
RXOTRX-59-9 EK0322 LOCAL MODE
转换为
["RXOTRX-59-9", "EK0322", "LOCAL MODE"]
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
最佳答案
String.unpack使用指令“A”非常适合固定宽度的字符串。
str = "RXOTRX-59-9 EK0322 LOCAL MODE"
p str.unpack("A20A4A11A16A15" ) # => ["RXOTRX-59-9", "", "", "EK0322", "LOCAL MODE"]
关于ruby - 如何在 Ruby 中将字符串解析为哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55313981/