2
假設我們創建文件a.txt.gz
如下:哈斯克爾bzlib-導管/ zlib的導管的例子
$ echo "foobar" > a.txt
$ gzip a.txt
我打算爲了在Haskell效仿zcat
使用zlib-conduit
。
我正在尋找一個簡單的例子,也可以應用於bzlib-conduit
。
注意:此問題已在Q & A型中立即回答。因此它故意沒有顯示任何研究工作。
假設我們創建文件a.txt.gz
如下:哈斯克爾bzlib-導管/ zlib的導管的例子
$ echo "foobar" > a.txt
$ gzip a.txt
我打算爲了在Haskell效仿zcat
使用zlib-conduit
。
我正在尋找一個簡單的例子,也可以應用於bzlib-conduit
。
注意:此問題已在Q & A型中立即回答。因此它故意沒有顯示任何研究工作。
如果您打算使用conduit
s,我強烈建議先閱讀關於此主題的優秀Conduit overview by Michael Snoyman和FP Complete tutorial。
我已經打開我的-vv
標誌,以使它適合於Haskell初學者(如我)。
您需要三樣東西:
讓我們開始用這個簡單的文件拷貝例如:
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
output.txt
事實上,decompress
documentation包含如何解壓縮的例子。
請注意,對於gzip
生成的文件,您不能使用decompress
。 decompress
解壓縮.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