2014-01-26 18 views

回答

2

如果您打算使用conduit s,我強烈建議先閱讀關於此主題的優秀Conduit overview by Michael SnoymanFP Complete tutorial

我已經打開我的-vv標誌,以使它適合於Haskell初學者(如我)。

您需要三樣東西:

  • 一個文件源
  • 一個zlib的減壓過濾
  • 一個標準輸出沉

讓我們開始用這個簡單的文件拷貝例如:

import Data.Conduit (runResourceT, ($$)) 
import qualified Data.Conduit.Binary as CB 
import Data.Conduit.Zlib 

main = do 
    runResourceT $ CB.sourceFile "input.txt" $$ CB.sinkFile "output.txt" 

Wh我們需要在這裏修改嗎?

  • 輸入文件名不是a.txt.gz
  • zlib的解壓縮缺少
  • 我們要輸出到標準輸出,而不是output.txt

事實上,decompress documentation包含如何解壓縮的例子。

請注意,對於gzip生成的文件,您不能使用decompressdecompress解壓縮.Z由舊程序compress生成的文件。

修改上面的例子後,我們得到:

import Data.Conduit (runResourceT, ($$), ($=)) 
import qualified Data.Conduit.Binary as CB 
import Data.Conduit.Zlib 
import System.IO 

main = do 
    runResourceT $ CB.sourceFile "a.txt.gz" $= ungzip $$ CB.sinkHandle stdout 

的不同使用bzlib-conduit時最小:

import Data.Conduit (runResourceT, ($$), ($=)) 
import qualified Data.Conduit.Binary as CB 
import Data.Conduit.BZlib 
import System.IO 

main = do 
    runResourceT $ CB.sourceFile "a.txt.bz2" $= bunzip2 $$ CB.sinkHandle stdout