假设您只想使用Perl 6语法解析大文件的开头。为了避免将整个文件读入字符串,然后在字符串上调用subparse
。阅读文件时是否可以进行子搜索?
我在subparsefile()
类中找不到任何Grammar
方法,所以我想这很难实现。但理论上应该是可能的,例如参见How do I search a file for a multiline pattern without reading the whole file into memory?
答案 0 :(得分:7)
目前你无法做到。此刻解析任何内容都需要整个字符串存在于内存中。
话虽如此,如果您知道图案可以扩展的最大行数,您可以执行以下操作:
my $max = 3; # maximum number of lines
for "textfile".IO.lines(:!chomp).rotor( $max => -$max + 1 ) -> @lines {
@lines.join.subparse( $grammar)
# and whatever you would like to do
}
它不是最快的方式,但它不必读取内存中的整个文件。