raku - 需要在 Raku 中的每 n 行读取文本文件的建议

标签 raku

关闭。这个问题需要更多 focused .它目前不接受答案。












想改进这个问题?更新问题,使其仅关注一个问题 editing this post .

2年前关闭。




Improve this question




我正在寻找一些关于如何通过 Raku/perl6 中的每个第 n 个文件读取文本文件的建议。

在生物信息学研究中,有时我们需要以一种不太直接的方式解析文本文件。例如 Fastq 文件,它一次以 4 行为一组存储数据。更重要的是,这些 Fastq 文件是成对出现的。所以如果我们需要解析这样的文件,我们可能需要从第一个 Fastq 文件中读取 4 行,从第二个 Fastq 文件中读取 4 行,然后从第一个 Fastq 文件中读取接下来的 4 行,然后读取来自第二个 fastq 文件的接下来的 4 行,......

我可以就解决此问题的最佳方法提出一些建议吗? Raku 的“IO.lines”方法似乎能够一次处理每一行。但不确定如何处理每一行

示例 fastq 文件对:https://github.com/wtwt5237/perl6-for-bioinformatics/tree/master/Come%20on%2C%20sister/fastq
我们之前用“IO.lines”尝试过的:https://github.com/wtwt5237/perl6-for-bioinformatics/blob/master/Come%20on%2C%20sister/script/benchmark2.p6

最佳答案

从 2 个文件中一次读取 4 行并将它们处理成一个东西,可以使用 zip 轻松完成和 batch :

my @filenames = <file1 file2>;
for zip @filenames.map: *.IO.lines.batch(4) {
    # expect ((a,b,c,d),(e,f,g,h))
}

这将继续生成,直到至少有一个文件被完全处理。 batch 的替代品是 rotor :当两个文件完全填满 4 行时,这将继续进行。完成循环的其他方法是同时指定 :partial带有 rotor 的标志, 并使用 roundrobin而不是 zip . YMMV。

关于raku - 需要在 Raku 中的每 n 行读取文本文件的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58776407/

相关文章:

raku - 如何正确扩充Any?

raku - 有没有办法在其结束之前离开尖形 block ?

sockets - perl6 IO::Socket::INET 无法从套接字接收数据:连接被对等方重置

raku - Cro:如何在 .cro.yml 中为每个服务定义端口?

raku - 如何在 Perl 6 的命令行上传递任意参数列表?

raku - Perl 6 在键入数组时报告 "Cannot unbox a type object"

cross-platform - MSYS2 上的 Perl6 脚本导致 'failed to stat file' 错误

types - 为什么 Perl6 在追加后不检查数组长度?

metaprogramming - 自省(introspection) : how do we get the name of a class within a class?

raku - Perl 6 中特殊符号作为字符串数组的元素