如何从文件中读取字符串并转换为 Data.ByteString 以便在 Data.Serialize.decode 中使用
how to read String from file and convert to Data.ByteString for use in Data.Serialize.decode
我需要分析包含以下行的日志文件:
2018-07-11T17:25:14.07565; [ZMQ] info; Sending message to; ROne (Addr {_unAddr = "tcp://127.0.0.1:10002"}); ## MSG ##; "\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t127.0.0.1\NUL\NUL\NUL\NUL\NUL\NUL'\DC3\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NAKtcp://127.0.0.1:10003\NUL\NUL\NUL\NUL\NUL\NUL\NUL@h_493n\RS2o\tu|1\"7GvP472V*n606q\von080\nV7651A0\DC4\US8035L23\&04\1'\r9W{WD8\b33go41o\STXM4X5R84eN=43923f9\:A38C\DLE\b\NUL\NUL\NUL\NUL\NUL\NUL\NULG\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t127.0.0.1\NUL\NUL\NUL\NUL\NUL\NUL'\DLE\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NAKtcp://127.0.0.1:10000\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL;42\NUL"
带有\NUL
的部分是使用
编写的
Prelude.putStr (show msg)
其中 msg
是由 Data.Serialize
的实例创建的 Data.ByteString
我需要
- 阅读整个
String
行
- select
ByteString
部分
- 把那个部分变成
ByteString
- 然后交给
Data.Serialize.decode
我不清楚如何执行第 3 步:将 ByteString
的 String
表示转换为真实的 ByteString
。
我最初的尝试是将#2 给 Data.ByteString.Char8.pack
。但是,当尝试 decode
decode (BSC8.pack l) :: Either String SignedRPC
我得到:
Left "too few bytes\nFrom:\tdemandInput\n\n"
也许:
Data.ByteString Text.Read> readMaybe "\"\NUL\"" :: Maybe ByteString
Just "\NUL"
我需要分析包含以下行的日志文件:
2018-07-11T17:25:14.07565; [ZMQ] info; Sending message to; ROne (Addr {_unAddr = "tcp://127.0.0.1:10002"}); ## MSG ##; "\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t127.0.0.1\NUL\NUL\NUL\NUL\NUL\NUL'\DC3\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NAKtcp://127.0.0.1:10003\NUL\NUL\NUL\NUL\NUL\NUL\NUL@h_493n\RS2o\tu|1\"7GvP472V*n606q\von080\nV7651A0\DC4\US8035L23\&04\1'\r9W{WD8\b33go41o\STXM4X5R84eN=43923f9\:A38C\DLE\b\NUL\NUL\NUL\NUL\NUL\NUL\NULG\SOH\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t127.0.0.1\NUL\NUL\NUL\NUL\NUL\NUL'\DLE\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NAKtcp://127.0.0.1:10000\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL;42\NUL"
带有\NUL
的部分是使用
Prelude.putStr (show msg)
其中 msg
是由 Data.Serialize
Data.ByteString
我需要
- 阅读整个
String
行 - select
ByteString
部分 - 把那个部分变成
ByteString
- 然后交给
Data.Serialize.decode
我不清楚如何执行第 3 步:将 ByteString
的 String
表示转换为真实的 ByteString
。
我最初的尝试是将#2 给 Data.ByteString.Char8.pack
。但是,当尝试 decode
decode (BSC8.pack l) :: Either String SignedRPC
我得到:
Left "too few bytes\nFrom:\tdemandInput\n\n"
也许:
Data.ByteString Text.Read> readMaybe "\"\NUL\"" :: Maybe ByteString
Just "\NUL"