这个问题已经解决了。非常感谢。
我的问题和我使用的解决方案如下所述。
问题:
open IN, "<./test.txt";
seek(IN,10,0);
read IN, $temp, 5;
seek(IN,20,0);
close(IN);情况是,我的句柄将从位置0开始。
在第一次查找函数之后,我的文件句柄将位于位置10。
在我读完之后,我的手柄会在15号位置。
此时此刻,我又在寻找。然后程序将从开始或从位置20开始查找。
我的问题是,有没有办法让我在文件中进行搜索,这样我就不需要每次都从文件的起始点进行搜索?
我使用的方式:
use Fcntl qw(SEEK_SET SEEK_CUR SEEK_END); #SEEK_SET=0 SEEK_CUR=1 ...
$target_byte=30;
open IN, "<./test.txt";
seek(IN,10,SEEK_SET);
read IN, $temp, 5;
$position=tell(IN);
seek(IN,$target_byte-$position,SEEK_CUR);
#do what I want
close(IN);发布于 2013-05-15 11:43:13
在我们开始之前
,
如果使用常量SEEK_SET、SEEK_CUR和SEEK_END而不是0、1和2,会更清楚。
你的代码就是
use Fcntl qw( SEEK_SET );
open IN, "<./test.txt";
seek(IN,10,SEEK_SET);
read IN, $temp, 5;
seek(IN,20,SEEK_SET);
close(IN);顾名思义,它将位置设置为指定的值。
所以,
read之后,文件位置将是15。在视觉上,
+-------------------------- 0: Initially.
| +---------------- 10: After seek($fh, 10, SEEK_SET).
| | +----------- 15: After reading "KLMNO".
| | | +------ 20: After seek($fh, 20, SEEK_SET).
| | | |
v v v v
file: ABCDEFGHIJKLMNOPQRSTUVWXYZ
indexes: 01234567890123456789012345如果你想相对于你当前的位置进行搜索,你可以使用SEEK_CUR。
+-------------------------- 0: Initially.
| +---------------- 10: After seek($fh, 10, SEEK_CUR).
| | +----------- 15: After reading "KLMNO".
| | | +- 25: After seek($fh, 10, SEEK_CUR).
| | | |
v v v v
file: ABCDEFGHIJKLMNOPQRSTUVWXYZ
indexes: 01234567890123456789012345https://stackoverflow.com/questions/16556332
复制相似问题