The*_*Cat 3 ruby lazy-evaluation
我有一些数据存储在一个文件中,每个感兴趣的块存储在一个段落中,如下所示:
hello
there
kind
people
of
stack
overflow
Run Code Online (Sandbox Code Playgroud)
我尝试使用以下代码阅读每个段落,但它不起作用:
paragraphs = File.open("hundreds_of_gigs").lazy.to_enum.grep(/.*\n\n/) do |p|
puts p
end
Run Code Online (Sandbox Code Playgroud)
正如我所说的正则表达式:"匹配以两个换行符结尾的任何内容"
我究竟做错了什么?
任何懒惰的方式解决这个问题.方法越精细越好.
IO#readline("\n \n")将执行您想要的操作.File是IO文件rubydoc页面上没有说明的方法,它们是所有方法的子类.
它逐行读取,其中行结束是给定的分隔符.
例如:
f = File.open("your_file")
f.readline("\n\n") => "hello\nthere\n\n"
f.readline("\n\n") => "kind\n\n"
f.readline("\n\n") => "people\nof\n\n"
f.readline("\n\n") => "stack\noverflow\n\n"
Run Code Online (Sandbox Code Playgroud)
每次调用readline lazy都会从顶部开始读取文件的一行.
或者您可以使用IO#each_line("\n \n")来迭代文件.
例如:
File.open("your_file").each_line("\n\n") do |line|
puts line
end
=> "hello\nthere\n\n"
=> "kind\n\n"
=> "people\nof\n\n"
=> "stack\noverflow\n\n"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |