タイトルによれば、zipアーカイブ内にあるファイルからzip-conduit(zipファイル私は扱っている非常に大きい、私は定数メモリでこれを行うことができる必要があります)。私は導管の基本的なアイデアを突き詰めましたが、怒りの中でそれらを使ったことは一度もなく、どこから始めるべきかについて非常に固執しています。私はコンジットチュートリアルを読んだことがありますが、私はそれを自分の問題と一致させるのに問題があります。Haskellのzip-conduitを使用してzipアーカイブ内のファイルから行を読み取る
ジップコンジットのドキュメントは1つが、以下のようなものを経由してzipアーカイブから供給することができます言う:私は何をする必要があるか推測
import qualified Data.Conduit.Binary as CB
import Codec.Archive.Zip
withArchive archivePath $ do
name:_ <- entryNames
sourceEntry name $ CB.sinkFile name
はCB.sinkFile
の代わりに何かを書くです。 Data.Conduit.Text
はlines
の機能を持っています - ファイルの行を取得するためにこれを何らかの方法で使用できますか?
単純な例があります。たとえば、putStrLn
を使用して、zipファイル内にアーカイブされた単純なテキストファイルの行を書き出すとします。前もって感謝します。
import Control.Monad.IO.Class (liftIO)
import Data.Conduit
import qualified Data.Conduit.Binary as CB
import qualified Data.Conduit.List as CL
import qualified Data.Conduit.Text as CT
main :: IO()
main = runResourceT
$ CB.sourceFile "input.txt"
$$ CT.decode CT.utf8
=$ CT.lines
=$ CL.mapM_ (\t -> liftIO $ putStrLn $ "Got a line: " ++ show t)
することもできますview and experiment on FP Haskell Center:
ありがとう、これははるかに理にかなっています。コンジットを使用して私のコードをもっときれいにしました。 – Chris