2

次のようなネストされたリストを含むテキスト ファイル (最大 300 MB) があります。

[[4, 9, 11, 28, 30, 45, 55, 58, 61, 62, 63, 69, 74, 76, 77, 82, 87, 92, 93, 94, 95], [4, 9, 11, 28, 30, 45, 55, 58, 61, 62, 63, 69, 74, 76, 77, 82, 87, 92, 93, 94],[4, 9, 11, 28, 30, 45, 55, 58, 61, 62, 63, 69, 74, 76, 77, 82, 85, 87, 92, 93, 94, 95]]

ファイルをhaskellIntegerリストに読み込むプログラムは次のとおりです。

import qualified Data.ByteString as ByteStr

main :: IO ()

-- HOW to do the same thing but using ByteStr.readFile for file access?
main = do fContents <- readFile filePath 
          let numList = readNums fContents
          putStrLn (show nums)

ByteStringこれは小さなテキスト ファイルでは機能しますが、ファイルをすばやく読み取るために使用したいと考えています。ByteString の関数がないことがわかりましたread。代わりに、独自のパーサーを attoparsec で作成する必要があります。これは、ByteString の解析をサポートしているためです。

attoparsecネストされたリストを解析するにはどうすればよいですか?

4

1 に答える 1

5

データはJSON形式のようですので、動作するData.Aeson decode関数を使用できますByteString

import qualified Data.ByteString.Lazy as BL
import Data.Aeson
import Data.Maybe

main = do fContents <- BL.readFile filePath 
          let numList = decode fContents :: Maybe [[Int]]
          putStrLn (show $ fromJust numList)
于 2013-11-11T04:57:00.350 に答える