如何从文件读取String并将其转换为Data.ByteString以在Data.Serialize.decode

时间:2018-07-12 19:26:05

标签: haskell serialization bytestring

我需要分析一个包含以下内容的日志文件:

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_\214\169\213n\RS\212o\tu|\191\"\207GvP\224\167\222V*n6\140\236q\von0\148\240\nV\157\206\225\251A\240\DC4\US\228\140\253\255L\242\163\&0\134\\\241'\r\229W{WD\218\b\143\213go\194\161o\STXM\154X\195R\128\134eN=\144\153\129\242\133f\149\\:A\213\158C\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;\154\202\NUL"

带有\NUL的部分是使用

编写的
Prelude.putStr (show msg)

其中msgData.ByteString实例创建的Data.Serialize

我需要

  1. 阅读整个String
  2. 选择ByteString部分
  3. 将该部分变成ByteString
  4. 然后将其交给Data.Serialize.decode

我不清楚如何执行第3步:将String的{​​{1}}表示形式转换为真实的ByteString

我最初的尝试是将#2分配给ByteString。但是,当尝试Data.ByteString.Char8.pack

decode

我得到:

decode (BSC8.pack l) :: Either String SignedRPC

1 个答案:

答案 0 :(得分:1)

也许:

Data.ByteString Text.Read> readMaybe "\"\\NUL\"" :: Maybe ByteString
Just "\NUL"