gpt4 book ai didi

raku - 在Perl6中逐行读取文件,如何惯用?

转载 作者:行者123 更新时间:2023-12-04 10:59:52 24 4
gpt4 key购买 nike

我在 Perl6 中有一个基本脚本,它运行得很慢,比准确的 perl5 翻译慢大约 30 倍。

CONTROL {
when CX::Warn {
note $_;
exit 1;
}
}
use fatal;
role KeyRequired {
method AT-KEY (\key) {
die "Key {key} not found" unless self.EXISTS-KEY(key);
nextsame;
}
}

for dir(test => /^nucleotide_\d**2_\d**2..3\.tsv$/) -> $tsv {
say $tsv;
my $qqman = $tsv.subst(/\.tsv$/, '.qqman.tsv');
my $out = open $qqman, :w;
put "\t$qqman";
my UInt $line-no = 0;
for $tsv.lines -> $line {
if $line-no == 0 {
$line-no = 1;
$out.put(['SNP', 'CHR', 'BP', 'P', 'zscore'].join("\t"));
next
}
if $line ~~ /.+X/ {
next
}
$line-no++;
my @line = $line.split(/\s+/);
my $chr = @line[0];
my $nuc = @line[1];
my $p = @line[3];
my $zscore = @line[2];
my $snp = "'rs$line-no'";
$out.put([$snp, $chr, $nuc, $p, $zscore].join("\t"));
#$out.put();
}
last
}

这是 Perl5 中的惯用语 while .

这是一个非常简单的脚本,它只更改文件中的文本列。这个 Perl6 脚本在 30 分钟内运行。 Perl5 翻译在 1 分钟内运行。

我试过阅读 Using Perl6 to process a large text file, and it's Too Slow.(2014-09)Perl6 : What is the best way for dealing with very big files?但我在这里没有看到任何可以帮助我的东西:(

我在运行 Rakudo version 2018.03 built on MoarVM version 2018.03
implementing Perl 6.c.

我意识到 Rakudo 还没有成熟到 Perl5 的水平(但我希望如此),但是我如何才能在更合理的时间范围内逐行读取文件?

最佳答案

有很多事情我会改变。

  • /.+X/可以简化为/.X/甚至 $line.substr(1).contains('X')
  • $line.split(/\s+/)可以简化为$line.words
  • $tsv.subst(/\.tsv$/, '.qqman.tsv')可以简化为$tsv.substr(*-4) ~ '.qqman.tsv'
  • uint而不是 UInt
  • given .head {}而不是 for … {last}

  • given dir(test => /^nucleotide_\d**2_\d**2..3\.tsv$/).head -> $tsv {
    say $tsv;
    my $qqman = $tsv.substr(*-4) ~ '.qqman.tsv';
    my $out = open $qqman, :w;
    put "\t$qqman";

    my uint $line-no = 0;
    for $tsv.lines -> $line {
    FIRST {
    $line-no = 1;
    $out.put(('SNP', 'CHR', 'BP', 'P', 'zscore').join("\t"));
    next
    }
    next if $line.substr(1).contains('X');

    ++$line-no;

    my ($chr,$nuc,$zscore,$p) = $line.words;

    my $snp = "'rs$line-no'";
    $out.put(($snp, $chr, $nuc, $p, $zscore).join("\t"));
    #$out.put();
    }
    }

    关于raku - 在Perl6中逐行读取文件,如何惯用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55659984/

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