在 Cool 中§

有关例程 lines,请参见主要文档 in context

sub lines(Str(Cool))
method lines()

将调用者(在子表单中为参数)强制转换为 Str,将其分解为行(删除换行符),并返回行列表。

say lines("a\nb\n").join('|');          # OUTPUT: «a|b␤» 
say "some\nmore\nlines".lines.elems;    # OUTPUT: «3␤»

此方法可以用作 IO::Path 的一部分来逐行处理文件,因为 IO::Path 对象继承自 Cool,例如:

for 'huge-csv'.IO.lines -> $line {
    # Do something with $line 
}
 
# or if you'll be processing later 
my @lines = 'huge-csv'.IO.lines;

如果没有参数,子例程 lines 将对 $*ARGFILES 进行操作。

要修改原处值,请使用 is copy 来强制使用可写容器。

for $*IN.lines -> $_ is copy { s/(\w+)/{$0 ~ $0}/.say }

在 Supply 中§

有关方法 lines,请参见主要文档 in context

method lines(Supply:D: :$chomp = True --> Supply:D)

创建一个供应,该供应将逐行发出通常由某些异步 I/O 操作创建的供应中的字符。可选的 :chomp 参数指示是否删除行分隔符:默认值为 True

在 IO::Socket::INET 中§

有关方法 lines,请参见主要文档 in context

method lines()

返回从套接字读取的行列表。

在 IO::CatHandle 中§

有关方法 lines,请参见主要文档 in context

method lines(IO::CatHandle:D: $limit = Inf:$close --> Seq:D)

IO::Handle.lines 相同。请注意,源句柄之间的边界被认为是换行符。

(my $f1 = 'foo'.IO).spurt: "foo\nbar";
(my $f2 = 'bar'.IO).spurt: 'meow';
IO::CatHandle.new($f1$f2).lines.raku.say;
# OUTPUT: «("foo", "bar", "meow").Seq␤» 

注意:如果 :$closeFalse,则完全消耗的句柄仍然会被关闭。

在 IO::Handle 中§

有关例程 lines,请参见主要文档 in context

sub          lines$what = $*ARGFILES|c)
multi method linesIO::Handle:D: $limit:$close )
multi method linesIO::Handle:D:         :$close )

子表单(默认情况下采用 $*ARGFILES)将对作为第一个参数的对象应用 lines 方法,并向其传递其余参数。

该方法将返回一个 Seq,其每个元素都是句柄中的一行(即由 .nl-in 划分的块)。如果句柄的 .chomp 属性设置为 True,则由 .nl-in 指定的字符将从每行中删除。

读取最多 $limit 行,其中 $limit 可以是非负 IntInfWhatever(解释为 Inf)。如果 :$close 设置为 True,则将在文件结束或达到 $limit 时关闭句柄。如果没有提供句柄,子例程表单默认为 $*ARGFILES

当句柄处于二进制模式时,尝试调用此方法将导致抛出X::IO::BinaryMode异常。

注意:行是惰性读取的,因此请确保返回的Seq在关闭句柄或尝试使用任何其他更改文件位置的方法时,要么完全具体化,要么不再需要。

say "The file contains ",
  '50GB-file'.IO.open.lines.grep(*.contains: 'Raku').elems,
  " lines that mention Raku";
# OUTPUT: «The file contains 72 lines that mention Raku␤» 

您可以在/proc/*文件中使用lines(从6.d版本开始)

say lines"/proc/$*PID/statm".IO ); # OUTPUT: «(58455 31863 8304 2 0 29705 0)␤» 

在 IO::Path 中§

有关方法 lines,请参阅上下文中的主要文档

method lines(IO::Path:D: :$chomp = True:$enc = 'utf8':$nl-in = ["\x0A""\r\n"], |c --> Seq:D)

打开调用者并返回其lines

该行为等同于打开调用者指定的 file,将:$chomp:$enc:$nl-in参数转发到IO::Handle.open,然后调用该句柄上的IO::Handle.lines,将任何剩余参数转发到该方法,并返回结果Seq

注意:行是惰性就绪的,底层使用的句柄在返回的Seq完全具体化之前不会关闭,因此请确保它具体化,否则您将泄漏打开的文件句柄。(提示:使用$limit参数

say "The file contains ",
  '50GB-file'.IO.lines.grep(*.contains: 'Raku').elems,
  " lines that mention Raku";
# OUTPUT: «The file contains 72 lines that mention Raku␤» 

在 Str 中§

有关例程 lines,请参阅上下文中的主要文档

multi method lines(Str:D: $limit:$chomp = True)
multi method lines(Str:D: :$chomp = True)

返回行列表。默认情况下,它会像调用$input.comb( / ^^ \N* /, $limit )一样对行尾进行 chomp。要保留行尾,请将可选命名参数$chomp设置为False

示例

say lines("a\nb").raku;    # OUTPUT: «("a", "b").Seq␤» 
say lines("a\nb").elems;   # OUTPUT: «2␤» 
say "a\nb".lines.elems;    # OUTPUT: «2␤» 
say "a\n".lines.elems;     # OUTPUT: «1␤» 
 
# Keep line endings 
say lines(:!chomp"a\nb").raku;  # OUTPUT: «("a\n", "b").Seq␤» 
say "a\n".lines(:!chomp).elems;   # OUTPUT: «1␤»

您可以通过将$limit变量设置为非零、非Infinity值来限制返回的行数

say <not there yet>.join("\n").lines2 ); # OUTPUT: «(not there)␤»

6.d语言开始已弃用:count参数用于返回总行数

say <not there yet>.join("\n").lines:count ); # OUTPUT: «3␤»

相反,对返回的Seq使用elems调用

say <not there yet>.join("\n").lines.elems# OUTPUT: «3␤»