首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Perl seek函数

Perl seek函数
EN

Stack Overflow用户
提问于 2013-05-15 11:28:52
回答 1查看 17.9K关注 0票数 6

这个问题已经解决了。非常感谢。

我的问题和我使用的解决方案如下所述。

问题:

代码语言:javascript
复制
open IN, "<./test.txt";
seek(IN,10,0);
read IN, $temp, 5;

seek(IN,20,0);
close(IN);

情况是,我的句柄将从位置0开始。

在第一次查找函数之后,我的文件句柄将位于位置10。

在我读完之后,我的手柄会在15号位置。

此时此刻,我又在寻找。然后程序将从开始或从位置20开始查找。

我的问题是,有没有办法让我在文件中进行搜索,这样我就不需要每次都从文件的起始点进行搜索?

我使用的方式:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-15 11:43:13

在我们开始之前

  • ,你让我们做的假设是没有意义的。第一个字节位于零位置。一直。
  • 它被称为“文件句柄”(因为它允许你持有文件),而不是“文件句柄”(因为它不处理任何东西)。

如果使用常量SEEK_SET、SEEK_CUR和SEEK_END而不是0、1和2,会更清楚。

你的代码就是

代码语言:javascript
复制
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);

顾名思义,它将位置设置为指定的值。

所以,

  • 在第一次寻道之后,文件位置将是10。
  • read之后,文件位置将是15。
  • 在第二次寻道之后,文件位置将是20。

在视觉上,

代码语言:javascript
复制
         +--------------------------  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

代码语言:javascript
复制
         +--------------------------  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: 01234567890123456789012345
票数 29
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16556332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档