在ByteString(而不是Word8或Char)上拆分ByteString

时间:2009-09-09 08:30:50

标签: string text haskell csv bytestring

我知道我已经有了Haskell Data.ByteString.Lazy函数来在单个字符上拆分CSV,例如:

split :: Word8 -> ByteString -> [ByteString]

但我想拆分多字符ByteString(就像拆分String而不是Char一样):

split :: ByteString -> ByteString -> [ByteString]

我在类似csv的文本文件中有多字符分隔符,我需要解析,并且单个字符本身出现在某些字段中,因此只选择一个分隔符并丢弃其他字符将会污染数据导入。

我有一些关于如何做到这一点的想法,但它们看起来有点像hacky(例如,拿三个Word8,测试它们是否是分隔符组合,如果是,则开始一个新的字段,进一步递减),然后我想象一下,无论如何我会重新发明一个轮子。如果没有从头开始重建功能,有没有办法做到这一点?

2 个答案:

答案 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