多次在ruby中读取/灰显文件
如何在不重新打开文件的情况下将文件的“指针”重置为其开始位置?(类似于C中的多次在ruby中读取/灰显文件,ruby,file,Ruby,File,如何在不重新打开文件的情况下将文件的“指针”重置为其开始位置?(类似于C中的fseek) 例如,我有一个文件,我想grep两种模式: f=open('test') => #<File:test> f.grep(/llo/) => ["Hello world\n"] f.grep(/wo/) => [] f=open('test')=># f、 grep(/llo/)=>[“你好,世界”] f、 grep(/wo/)=>[] 是否可以在不重新打开文件的
fseek
)
例如,我有一个文件,我想grep两种模式:
f=open('test') => #<File:test>
f.grep(/llo/) => ["Hello world\n"]
f.grep(/wo/) => []
f=open('test')=>#
f、 grep(/llo/)=>[“你好,世界”]
f、 grep(/wo/)=>[]
是否可以在不重新打开文件的情况下重置f
注意:我不是在寻找解决办法;我可以自己想一些 使用
将ios定位到输入的开头,将lineno重置为零
f = File.new("testfile")
f.readline #=> "This is line one\n"
f.rewind #=> 0
f.lineno #=> 0
f.readline #=> "This is line one\n"
查看
IO
类的ruby文档。要重置流,请执行以下操作:
f.pos = 0
或
请注意,您也可以使用这些方法将流设置为任意字节位置,但如果文件包含多字节字符,请小心
提示:File.concedens
将告诉您继承链,以便您可以查找可能实现所需功能的方法(但有时您必须对单例方法和method\u missing
)执行更高级的反射
更新:
megas的回答可能更清晰,因为倒带
也会重置lineno
grep
的输出不受lineno
值的影响,但是lineno
的输出将变得越来越不准确,除非将其重置。如果您不关心lineno
,您可以安全地使用我们的任一解决方案
f.seek 0