如何在TCL中读取gzip压缩文件?

时间:2014-04-30 09:34:28

标签: tcl gzip

我有一个扩展名为.gz的文件。当我尝试使用以下TCL命令读取和打印文件时,即使我能够在VI编辑器中看到内容,也无法读取文件。

我尝试使用以下TCL代码:

set of [glob *.gz ]
set op [open "$of" r]
set file_data [read $op]
set data [split $file_data "\n"]
foreach line $data {
    puts " $line"
}

2 个答案:

答案 0 :(得分:5)

在Tcl 8.6中,你有内置的支持,所以你可以这样做:

set f [open $filename]
zlib push gunzip $f
set data [read $f]
close $f

zlib push gunzip只是将合适的解压缩变换附加到频道。

在8.5及之前,您最好使用zcatgzcat从管道中读取(取决于平台详细信息:

set f [open "|gzcat $filename"]
set data [read $f]
close $f

不足之处在于它远不如便携。

答案 1 :(得分:0)

从管道读取

鉴于名为 foo.gz 的文件,您可以使用以下内容:

set pipeline [open "| zcat foo.gz"]
set data [read $pipeline]
close $pipeline

这显然依赖于外部gzip实用程序。可能有一个纯TCL解决方案,但如果你的环境有一个gzip可执行文件,这是快速而简单的。