我正在尝试使用带有 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)
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稍微快一点,可能会快一点。