3

次のように、CSV を単一の文字に分割する Haskell Data.ByteString.Lazy 関数が既にあることは知っています。

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

しかし、複数文字の ByteString で分割したい (Char ではなく String で分割するように):

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

解析する必要がある csv のようなテキスト ファイルに複数文字の区切り文字があり、個々の文字自体が一部のフィールドに表示されるため、区切り文字を 1 つだけ選択して他の文字を破棄すると、データ インポートが汚染されます。

私はこれを行う方法についていくつかのアイデアを持っていましたが、それらは一種のハックのようです (たとえば、3 つの 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 に答える