Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多次在ruby中读取/灰显文件_Ruby_File - Fatal编程技术网

多次在ruby中读取/灰显文件

多次在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/)=>[] 是否可以在不重新打开文件的

如何在不重新打开文件的情况下将文件的“指针”重置为其开始位置?(类似于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/)=>[]
是否可以在不重新打开文件的情况下重置
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