如何将一个var的内容解压到另一个var?

问题描述 投票:0回答:1

我正在尝试将 var 内部的内容解压缩到同一个 var 或另一个变量中。 我使用 gzip -k 文件名创建了一个 .gz 文件。它生成了一个 filename.gz,同时保留了原始文件。我将此 gz 文件上传到服务器。 以下行将 gz 文件下载到 var。是的,我可以使用 package require http 等...

set testvar [exec wget -q -O - url-to-gz-file]; string length $testvar

字符串长度 $testvar 返回一个数字。 现在,我需要将 $testvar 内部的内容缩小/解压缩到同一个 var 或另一个 var(例如 testvar2),并且该 var 必须包含原始文件的内容。我的意思是,压缩之前文件的内容。原始文件只是一个文本文件。

我可能需要指示 testvar 是二进制的。

这可能吗?我不想先将 .gz 文件下载到硬盘然后再进行处理。这一切都需要“在记忆中”完成。

谢谢。

variables compression tcl gzip deflate
1个回答
0
投票

最简单的方法是将

wget
插入
gunzip
:

set result [exec wget -q -O - url-to-gz-file | gunzip -c]

这需要将未压缩的内容按照系统默认的字符编码进行编码;如果它是二进制数据或其他文本编码,您将会遇到问题(由于字符编码转换,您的

teststr
变量可能无法保存有效的 gzip 数据)。

在这些情况下,tcl 附带

zlib
命令,用于处理 zlib 和 gzip 压缩。
zlib gunzip STRING
子命令在这里特别有用。您必须使用
open
,而不是
exec
,才能获取可以传递到
zlib gunzip
的二进制数据。它看起来像:

# b for opening in binary mode instead of having to set it with fconfigure
set wget [open "| wget -q -O - url-to-gz-file" rb]
set binData [zlib gunzip [read -nonewline $wget]]
close $wget
set result [encoding convertfrom utf-8 $binData] ;# Or whatever encoding the file uses

您可以使用

zlib push
将图层添加到
wget
通道,以便在其上使用
read
也会自动解压缩数据。

set wget [open "| wget -q -O - url-to-gz-file" rb]
zlib push gunzip $wget
set result [encoding convertfrom utf-8 [read -nonewline $wget]]
close $wget
© www.soinside.com 2019 - 2024. All rights reserved.