在 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 -># or if you'll be processing latermy = 'huge-csv'.IO.lines;
如果没有参数,子例程 lines
将对 $*ARGFILES
进行操作。
要修改原处值,请使用 is copy
来强制使用可写容器。
for .lines -> is copy
在 Supply 中§
有关方法 lines,请参见主要文档 in context
method lines(Supply: : = True --> Supply)
创建一个供应,该供应将逐行发出通常由某些异步 I/O 操作创建的供应中的字符。可选的 :chomp
参数指示是否删除行分隔符:默认值为 True
。
在 IO::Socket::INET 中§
有关方法 lines,请参见主要文档 in context
method lines()
返回从套接字读取的行列表。
在 IO::CatHandle 中§
有关方法 lines,请参见主要文档 in context
method lines(IO::CatHandle: = Inf, : --> Seq)
与 IO::Handle.lines
相同。请注意,源句柄之间的边界被认为是换行符。
(my = 'foo'.IO).spurt: "foo\nbar";(my = 'bar'.IO).spurt: 'meow';IO::CatHandle.new(, ).lines.raku.say;# OUTPUT: «("foo", "bar", "meow").Seq»
注意:如果 :$close
为 False
,则完全消耗的句柄仍然会被关闭。
在 IO::Handle 中§
有关例程 lines,请参见主要文档 in context
sub lines( = , |c)multi method lines( IO::Handle: , : )multi method lines( IO::Handle: : )
子表单(默认情况下采用 $*ARGFILES
)将对作为第一个参数的对象应用 lines
方法,并向其传递其余参数。
该方法将返回一个 Seq
,其每个元素都是句柄中的一行(即由 .nl-in
划分的块)。如果句柄的 .chomp
属性设置为 True
,则由 .nl-in
指定的字符将从每行中删除。
读取最多 $limit
行,其中 $limit
可以是非负 Int
、Inf
或 Whatever
(解释为 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: : = True, : = 'utf8', : = ["\x0A", "\r\n"], |c --> Seq)
打开调用者并返回其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: , : = True)multi method lines(Str: : = 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 endingssay 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").lines( 2 ); # OUTPUT: «(not there)»
从6.d
语言开始已弃用,:count
参数用于返回总行数
say <not there yet>.join("\n").lines( :count ); # OUTPUT: «3»
say <not there yet>.join("\n").lines.elems; # OUTPUT: «3»