【发布时间】:2019-11-22 12:13:58
【问题描述】:
我有一个这样的地图列表:
[
%{"000000000 000000000000 00000000 ": %{}},
%{AM01: %{"C4" => "11111111", "C5" => "1"}},
%{AM04: %{"C2" => "22222222", "C6" => "2"}}
]
如何在一张地图中减少此地图列表,如下所示?
%{
"000000000 000000000000 00000000 ": %{},
AM01: %{"C4" => "11111111", "C5" => "1"},
AM04: %{"C2" => "22222222", "C6" => "2"}
}
生成这个地图列表的代码是这样的:
for segment <- Enum.filter(String.split(message, ["\x02", "\x1d", "\x1e", "\x03"]), fn x -> x != "" end) do
[head | tail] = Enum.filter(String.split(segment, "\x1c"), fn x -> x != "" end)
%{String.to_atom(head) => Map.new(tail, &String.split_at(&1, 2))}
end
【问题讨论】:
-
您的消息是固定宽度和完全相同的结构吗?如果是这样,请发布一个。
-
是的。如果此消息是 NCPDP 标准中的消息。 AM01 或 AM04 是段。 Map 包含该段的信息,每组的前两个字母“\x1c”标识信息的类型。唯一的细节是第一段是一个标题,它不包含地图,但我没有找到另一种方法。
-
你能发布标准的链接吗?
-
文档大得离谱,但我可以发布。在理想情况下,消息的最终结果将是:%{ HEADER: "000000000 000000000000 00000000", AM01: %{"C4" => "11111111", "C5" => "1"}, AM04: %{ "C2" => "22222222", "C6" => "2"} }
-
你能描述一下格式吗,例如前两个字节是长度标头,接下来的 4 个字节是...