gpt4 book ai didi

Ruby:如何从文件或 STDIN 中读取压缩数据?

转载 作者:数据小太阳 更新时间:2023-10-29 08:10:31 25 4
gpt4 key购买 nike

我想从输入文件或 STDIN 中读取数据 - 输入数据可能会被 gzip 压缩。

对于文件,可以像这样使用 Zlib::GzipReader 完成:

require 'zlib'

ios = File.open(file, mode='r')

begin
ios = Zlib::GzipReader.new(ios)
rescue
ios.rewind
end

ios.each_line { |line| puts line }

但是,我无法从 STDIN 正确检测到压缩数据:

require 'zlib'

if STDIN.tty?
# do nothing
else
ios = STDIN

begin
ios = Zlib::GzipReader.new(ios)
rescue
ios.rewind
end
end

ios.each_line { |line| puts line }

以上内容适用于 STDIN 中的 gzip 数据,但常规数据会产生以下结果:

./test.rb:14:in `rewind': Illegal seek - <STDIN> (Errno::ESPIPE)
from ./test.rb:14:in `rescue in <main>'
from ./test.rb:11:in `<main>'

那么,如果我无法倒带 STDIN,我该如何测试 STDIN 中的数据是否已压缩?

干杯,

马丁

最佳答案

从STDIN加载数据到临时文件,然后解析它

require 'tempfile'

tf = Tempfile.new('tmp')

while $stdin.gets do
tf.puts $_
end

tf.rewind

关于Ruby:如何从文件或 STDIN 中读取压缩数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6086803/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com