0

大規模な (3 GB 以上、gzipで圧縮された) FTP ダウンロードからいくつかのデータを抽出し、これをオンザフライで実行して、ダンプを回避し、ディスクに完全にダウンロードしたいと考えています。

目的のデータを抽出するには、圧縮されていないストリームを行ごとに調べる必要があります。

だから私は道徳的に同等のものを探しています

use PerlIO::gzip;

my $handle = open '<:gzip', 'ftp://ftp.foobar.com/path/to/blotto.txt.gz'
             or die $!;
for my $line (<$handle>) {
    # etc.
}
close($handle);

ftp://ftp.foobar.com/path/to/blotto.txt.gzFWIW: (with で)への読み取りハンドルを開く方法は知っていますが、この開いているハンドルにレイヤーを追加する方法Net::FTP::reprはまだわかりません。:gzip


上記の質問に対する答えを見つけるのに必要以上に時間がかかったので、次にそれを必要とする人のために投稿しようと思いました。

4

2 に答える 2

1

OK、答えは (IMO)まったく明白ではありません: binmode($handle, ':gzip').

これが肉付けされた例です:

use strict;
use Net::FTP;
use PerlIO::gzip;

my $ftp = Net::FTP->new('ftp.foobar.com') or die $@;
$ftp->login or die $ftp->message;  # anonymous FTP
my $handle = $ftp->retr('/path/to/blotto.txt.gz') or die $ftp->message;

binmode($handle, ':gzip');

for my $line (<$handle>) {
    # etc.
}
close($handle);
于 2014-04-19T13:28:22.290 に答える