在一个字节串(而不是Word8或字符)拆分字节字符串(Split ByteString on a B

2019-08-04 10:56发布

我知道我已经有哈斯克尔Data.ByteString.Lazy的函数,在一个单一的字符,如拆分CSV:

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

但我想拆就多字符的字节字符串(如一个字符串,而不是一个字符分割):

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

我有我需要解析CSV般的文本文件,多字符分隔符,并且单个字符本身出现在一些领域,所以选择只有一个分隔符,并丢弃别人会污染数据导入。

我对如何做到这一点的一些想法,但他们似乎有种哈克(如取三个Word8s,测试,如果他们是分隔组合,开始一个新的领域,如果他们是,递归进一步),和我想象我会是无论如何重塑车轮。 有没有办法做到这一点无需从头开始重建的功能?

Answer 1:

字节串的文件breakSubstring包含做你所要求的功能:

tokenise x y = h : if null t then [] else tokenise x (drop (length x) t)
    where (h,t) = breakSubstring x y


Answer 2:

有在字节串上的子序列分割的几个功能:

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

还有一个

  • 字节串-CSV包, http://hackage.haskell.org/package/bytestring-csv
  • 拆分包: http://hackage.haskell.org/package/split字符串虽然。


文章来源: Split ByteString on a ByteString (instead of a Word8 or Char)