我知道我已经有了Haskell Data.ByteString.Lazy函数来在单个字符上拆分CSV,例如:
split :: Word8 -> ByteString -> [ByteString]
但我想拆分多字符ByteString(就像拆分String而不是Char一样):
split :: ByteString -> ByteString -> [ByteString]
我在类似csv的文本文件中有多字符分隔符,我需要解析,并且单个字符本身出现在某些字段中,因此只选择一个分隔符并丢弃其他字符将会污染数据导入。
我有一些关于如何做到这一点的想法,但它们看起来有点像hacky(例如,拿三个Word8,测试它们是否是分隔符组合,如果是,则开始一个新的字段,进一步递减),然后我想象一下,无论如何我会重新发明一个轮子。如果没有从头开始重建功能,有没有办法做到这一点?
答案 0 :(得分:2)
在字节串中有一些函数可用于分割子序列:
breakSubstring :: ByteString -> ByteString -> (ByteString,ByteString)
还有一个
答案 1 :(得分:2)
Bytestrings breakSubstring
的文档包含一个能满足您要求的功能:
tokenise x y = h : if null t then [] else tokenise x (drop (length x) t)
where (h,t) = breakSubstring x y