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

bha*_*mar 3 gzip tcl

我有一个扩展名为.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"
}
Run Code Online (Sandbox Code Playgroud)

Don*_*ows 5

在Tcl 8.6中,您有内置的支持,因此您可以:

set f [open $filename]
zlib push gunzip $f
set data [read $f]
close $f
Run Code Online (Sandbox Code Playgroud)

zlib push gunzip只是附加一个合适的解压缩变换到信道.

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

set f [open "|gzcat $filename"]
set data [read $f]
close $f
Run Code Online (Sandbox Code Playgroud)

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


Tod*_*obs 0

从管道中读取

给定一个名为foo.gz的文件,您可以使用如下内容:

set pipeline [open "| zcat foo.gz"]
set data [read $pipeline]
close $pipeline
Run Code Online (Sandbox Code Playgroud)

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