首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Perl6:逐行读取大的gzipped文件

Perl6:逐行读取大的gzipped文件
EN

Stack Overflow用户
提问于 2019-02-22 02:21:35
回答 1查看 526关注 0票数 9

我正在尝试用Perl6逐行读取gz文件,但是,我被阻止了:

  • 上打开了一个问题,我正在尝试perl5的Compress::Zlib来翻译这段代码,它在Perl5中工作得很好:

<代码>G212

使用Compress::Zlib;my $file = "data.txt.gz";my $gz = gzopen($file,"rb")或die "Error reading $file:$gzerrno";while ($gz->gzreadline( $_ ) > 0) {#处理读取$_中的行} die "Error reading $file:$gzerrno“if $gzerrno != Z_STREAM_END;$gz->gzclose();

在Perl6中使用Inline::Perl5如下所示:

代码语言:javascript
复制
use Compress::Zlib:from<Perl5>;
my $file = 'chrMT.1.vcf.gz';
my $gz = Compress::Zlib::new(gzopen($file, 'r');
while ($gz.gzreadline($_) > 0) {
  print $_;
}
$gz.gzclose();

但是我不知道怎么翻译:(

  1. 我被Lib::Archive https://github.com/frithnanth/perl6-Archive-Libarchive/blob/master/examples/readfile.p6搞糊涂了我不知道如何才能得到类似项目3的东西这里
  2. 应该有像

这样的东西

Perl6中的for $file.IO.lines(gz) -> $line {或类似的东西,如果它存在,我找不到它。

如何逐行读取一个大文件,而不是在Perl6中将所有内容都读入内存?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-22 07:03:07

更新现已测试,显示错误,现已修复。

解决方案#2

代码语言:javascript
复制
use Compress::Zlib;

my $file   = "data.txt.gz" ;
my $handle = try open $file or die "Error reading $file: $!" ;
my $zwrap  = zwrap($handle, :gzip) ;

for $zwrap.lines {
    .print
}

CATCH { default { die "Error reading $file: $_" } }

$handle.close ;

我已经用一个小的gzipped文本文件对此进行了测试。

我对gzip等不太了解,但我是基于以下几点得出这个结论的:

  • Knowing P6;
  • 阅读Compress::Zlib's README并在模块的源代码中选择zwrap代码,特别是the zwrap routine routine;
  • Looking our sub zwrap ($thing, :$zlib, :$deflate, :$gzip);
  • And的签名,主要是猜测我需要传递:gzip副词。

<zwrap>F217

请评论我的代码是否适合你。我猜最主要的问题是它对于你拥有的大文件是否足够快。

解决方案#5的失败尝试

在解决方案#2有效的情况下,我希望能够编写以下代码:

代码语言:javascript
复制
use Compress::Zlib ;
.print for "data.txt.gz".&zwrap(:gzip).lines ;

但失败的原因是:

代码语言:javascript
复制
No such method 'eof' for invocant of type 'IO::Path'

这可能是因为这个模块是在IO类重组之前编写的。

这让我找到了@MattOates' issue。我注意到没有响应,我在https://github.com/MattOates?tab=repositories上也没有看到相关的回购。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54813782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档