如何使用 raku IO.lines.race 构造跳过文本文件的前几行

Tao*_*ang 6 raku

我正在尝试使用带有 IO.lines.race 构造的 raku 读取文本文件。例如

for $file.IO.lines.race
{
  #do something, such as
  my ($a,$b)=.split(" ");
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能跳过文本文件的前三行?

谢谢!

Val*_*kas 10

更新:正如 Elizabeth Mattijsen 推荐的那样,使用跳过而不是尾部更有效。

for $file.IO.lines.skip(3).race
Run Code Online (Sandbox Code Playgroud)

您可以使用一个尾部例程:

for $file.IO.lines.tail(*-3).race
{
  #do something, such as
  my ($a,$b)=.split(" ");
}
Run Code Online (Sandbox Code Playgroud)

  • `skip` 也可以工作,并且效率更高:`for $file.IO.lines.skip(3).race` (4认同)

jjm*_*elo 5

Lukas Valle 上面的答案非常好;您可以使用skip跳过不需要的行。但是,我不禁要指出,这种情况与其他功能性构造(例如 map)一起使用会更好:

$file.IO.lines.skip(3).race.map( .split(" ") );
Run Code Online (Sandbox Code Playgroud)

这样,您可以将多个操作链接在一起,而不会创建不同的循环。当然,在 Raku TIMTOWDI 中,for循环(或多个)完全没问题。

此外,在这种情况下,我真的会计算循环或map将花费多少时间。对于没有很多行的文件,不会race给你太多,而且由于开销,它甚至可能更慢。如果您的意图是IO::Handle.Supply稍微快一点,可能会快一点。