3

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

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

但我想拆分一个多字符的 ByteString(比如拆分一个字符串而不是一个字符):

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

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

我对如何做到这一点有一些想法,但它们似乎有点老套(例如,取三个 Word8,测试它们是否是分隔符组合,如果是,则开始一个新字段,进一步递归),我想我会无论如何都要重新发明一个轮子。有没有办法在不从头开始重建功能的情况下做到这一点?

4

2 回答 2

2

bytestring 中有一些函数用于分割子序列:

breakSubstring :: ByteString -> ByteString -> (ByteString,ByteString)

还有一个

于 2009-09-09T10:48:36.303 回答
2

Bytestrings 的文档breakSubstring包含一个功能,可以满足您的要求:

tokenise x y = h : if null t then [] else tokenise x (drop (length x) t)
    where (h,t) = breakSubstring x y
于 2009-09-09T11:24:18.453 回答