Perl 查找函数

2023-11-22

这个问题就解决了。非常感谢。
我的问题和我正在使用的解决方案如下所述。

问题:

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);

在我们开始之前,

  • 您要求我们的假设毫无意义。第一个字节位于位置零。总是。

  • 它被称为“文件句柄”(因为它允许您保存文件),而不是“文件处理程序”(因为它不处理任何内容)。

如果使用常量 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);

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

So,

  • 第一次查找后,文件位置将为 10。
  • 之后read,文件位置将为 15。
  • 第二次查找后,文件位置将为 20。

从视觉上看,

         +--------------------------  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: 01234567890123456789012345
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl 查找函数 的相关文章

随机推荐

  • 如何输出矩阵维度及其内容?

    是否可以使 GNU Octave 输出矩阵尺寸及其内容 例如 它应该产生某种东西 像这样 octave 1 gt X 1 2 3 4 X 2x2 1 2 3 4 octave 2 gt X 1 ans 1x2 1 2 在 MATLAB 中
  • 在java应用程序中保存用户设置的最佳方法是什么?

    在java桌面应用程序中安全保存用户设置的最佳方法是什么 例如 如果我想保存 Ftp 帐户设置 最好的方法是什么 Thanks The 首选项 API是存储用户和系统首选项的好方法 如果您想存储密码 则必须对其进行加密 这是一篇不错的文章
  • 如何在打字稿中将一个枚举映射到另一个枚举?

    我想将一个具有枚举类型的对象的属性映射到另一个具有其他枚举类型的对象的属性 我尝试过type1 a as Enum2 or Enum2 type1 a 没有成功 这是我的简化代码问题 enum Enum1 N 0 A 1 B 2 enum
  • 使用 Espresso 时出现 NullPointer 异常

    我正在尝试使用浓缩咖啡 但我收到了这个错误 如果我缺少一些代码 我就没有 任何想法都将受到高度赞赏 错误日志 java lang NullPointerException No instrumentation registered Must
  • 使用 Vee-Validate 验证提交时的子输入组件

    我目前正在尝试创建一个包含多个 输入字段 组件的注册表单 这些组件都需要在按下 提交 后进行验证 目前 当其中的文本发生更改时 它们都会自行验证 但我发现很难对所有输入字段进行全局调用以验证所有输入字段 我想要实现的目标如下 http ve
  • PostgreSQL:加速数百万行表中的 SELECT 查询

    我有一个包含 gt 450 万行的表 我的SELECT查询对于我的需求来说太慢了 该表是用以下命令创建的 CREATE TABLE all legs carrier TEXT dep hub TEXT arr hub TEXT dep dt
  • 使用 Passport-saml 注销:req.logout() 或 Strategy.logout(),或两者?

    我有一个关于使用 Passport saml 进行身份验证时注销用户的正确方法的问题 使用 Passport saml 的示例脚本显示注销如下 app get logout function req res req logout res r
  • 无法在打字稿中导入 svg 文件

    In typescript tsx 文件我无法使用以下语句导入 svg 文件 import logo from logo svg 转译器 说 ts cannot find module logo svg 我的 svg 文件只是
  • 导出签名的应用程序而不“优化”png图像

    当我从 eclipse 导出 apk 时 它会压缩所有 png 图像 例如 一张 4 6 KB 的 png 在 apk 中变成了 2 15 KB 不过我更喜欢使用优化 png 文件tinypng在构建 apk 之前 这会生成更小的文件 同样
  • Composer 没有为包生成 .git 文件夹

    这很奇怪 似乎是我错过的一些小事 前几天 当我composer install我得到了自己的供应商目录 git 这允许我进行更改并更新我自己的打包存储库 今天跑步后composer install the git每个包文件夹内的目录丢失 我
  • 烛台多个 Y 值

    我的任务是在 Windows 窗体中使用 MSChart 制作烛台图 我已经成功地制作了 3D 条形图 没有任何问题 但在互联网 微软的源代码 WinSamples 和大量的搜索之后 我找不到创建烛台图的正确方法 可以帮助我的是一个清楚的例
  • mat 不是数值元组:openCV 错误

    我写下了一段显示错误的代码 但我没有得到它 请帮助 它的显示垫不是数字元组 import cv import cv2 capture cv2 VideoCapture j 3gp while 1 frame1 capture read gr
  • java复制构造函数和继承

    经过一番搜索后 我没有找到有关复制构造函数和继承的问题的任何好的答案 我有两个班级 用户和实习生 Trainee继承自User 并为Trainee添加两个String参数 现在我成功地创建了 User 的复制构造函数 但我对 Trainee
  • 将 Visual Studio 2012 导出为 2010 sln 格式

    我的老师抱怨他无法在 VS2010 环境中读取 VS2012 格式 我在设置等中环顾四周 但找不到任何东西 如何将 VS2010 可读格式的项目提供给我的老师 手动修改sln 备份您的项目文件夹 复制 粘贴到另一个位置 例如名为 backu
  • 无法安装 npm 包:“npm ERR!errno -4048”

    我正在尝试安装 npm 包 node xmpp server 但安装失败 以前 当我尝试安装全局安装而不是本地安装的软件包时 但现在根本不安装 我以管理员身份运行 bash I ran npm install node xmpp serve
  • ISR和多线程程序中的C'Volatile'关键字?

    我读到了 C 的用法volatile内存映射硬件寄存器 ISR 和多线程程序中的关键字 1 注册 uint8 t volatile pReg while pReg 0 do sth pReg point to status register
  • 如何知道DIV中的所有元素是否已完全加载?

    有一个div其中将通过 Ajax 加载一些元素 图像 iframe 等 这些元素完全加载后 我需要执行一个函数div 如何确定数组中的所有元素div已满载 我使用 jQuery 作为库 对于图像和 iframe 您可以使用load even
  • 将MySQL的POINT转换为PHP中的文本

    使用 PHP 如何将值转换为POINT数据类型为字符串 例如POINT 34 601020 58 371020 最好以 WKT 或 GeoJSON 形式输出 如果我回显原始值 我会得到奇怪的字符 我尝试过使用bin2hex然后尝试将十六进制
  • for循环中的lambda仅取最后一个值[重复]

    这个问题在这里已经有答案了 我有代码 options INFO WARNING DEBUG for i in range len options option options i cMenu add command label format
  • Perl 查找函数

    这个问题就解决了 非常感谢 我的问题和我正在使用的解决方案如下所述 问题 open IN lt test txt seek IN 10 0 read IN temp 5 seek IN 20 0 close IN 情况是 我的句柄将从位置