Я хотел бы прочитать данные из входного файла или STDIN - входные данные могут быть сжаты.
Для файлов это можно сделать с помощью 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, но обычные данные приводят к следующему:
./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 или нет?
Приветствия,
Мартин