免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: sunzhiguolu
打印 上一主题 下一主题

已经解决.结贴 脚本 Perl - 关于模块 Tie::File 的几点疑问 [复制链接]

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
31 [报告]
发表于 2015-12-04 23:59 |只看该作者
本帖最后由 104359176 于 2015-12-05 00:02 编辑

回复 24# sunzhiguolu


    Tie:: 系列的模块没有用过,因为我知道将内存的数据通过 IO 和文件保持同步,会大大降低程序的速度。现在内存那么大,保存几个 G 的内容都没问题。
  
    处理完数据,一次性的保存到文件中就可以了。

    如果想使用操作 IO 的接口操作数据,就直接用字符串的引用。
  1. my $string = <<'MULTILINE';
  2. Buster
  3. Mimi
  4. Roscoe
  5. MULTILINE

  6. open my ($str_fh), '<', \$string;
  7. my @end_in_vowels = grep /[aeiou]$/, <$str_fh>;
复制代码
这个例子是<<Perl 高效编程>> 130 页的例子。

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 太棒了, 了解了好多知识!

查看全部评分

求职 : 软件工程师
论坛徽章:
3
程序设计版块每日发帖之星
日期:2015-10-07 06:20:00程序设计版块每日发帖之星
日期:2015-12-13 06:20:00程序设计版块每日发帖之星
日期:2016-05-05 06:20:00
32 [报告]
发表于 2015-12-05 00:15 |只看该作者
回复 30# sunzhiguolu


Python 是通过第三方模块提供对正则的支持:
  1. import re
复制代码
但在语法上又特别的给与了正则表达式特别的待遇 :
  1. if re.match(r'\n', any_str):
  2.     print("ok")
复制代码
正则表达式也可以通过字符串转换:
  1. def str_to_regex(s): return re.compile(s)
复制代码
然后就能用了:
  1. compile_regex = str_to_regex(regex_str)
  2. if compile_regex.match(any_str):
  3.     print("ok")

复制代码
Python 正则的写法可以使用和 Perl 几乎相同的形式。

评分

参与人数 1信誉积分 +10 收起 理由
sunzhiguolu + 10 赞一个!

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
33 [报告]
发表于 2015-12-05 09:29 |只看该作者
本帖最后由 sunzhiguolu 于 2015-12-05 09:33 编辑

回复 31# 104359176
《Perl 高效编程》

记下了, 谢谢您给予的帮助. 了解了很多关于延迟写入模块以外的知识.
您对 Python 也这么了解呀, 学习了.
非常感谢您提供的小例子, 非常喜欢!

   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
34 [报告]
发表于 2015-12-05 09:41 |只看该作者
回复 27# substr函数
前辈您好, 前面我与您在开玩笑, 请您不要介意.
平时看您在板块中非常的热心帮助其他小伙伴, 所以在回帖时就随便了点.
如果您是一个比较严肃的人, 以后我不会与您开玩笑了. (非常抱歉)

   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
35 [报告]
发表于 2015-12-06 16:45 |只看该作者
本帖最后由 sunzhiguolu 于 2015-12-07 23:09 编辑

回复 26# MMMIX
大神您好, 我把 Tie::File 模块的文档已经看完, 向您请教个两个问题:
我的代码如下:

  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use Tie::File;
  5. use Fcntl 'O_RDWR';

  6. tie (my @aData, 'Tie::File', 'z:\data.txt', mode => O_RDWR) or die "$!";
  7. (tied @aData)->autodefer(0);
  8. (tied @aData)->defer;
  9. foreach (0..99){
  10.     push @aData, $_;
  11. }
  12. <STDIN>;
  13. (tied @aData)->autodefer(1);
  14. (tied @aData)->flush;
  15. untie (@aData);
复制代码
1.> 程序运行完成后, 提示: "Undefined subroutine &main::autodefer called at Z:\test.pl line 15, <STDIN> line 1";
      1.1> 我看文档中也是这样使用的, 但是运行后就报告上面的这个错误.
2.> 按照文档中的说明, push, pop, shift, unshift, splice 等函数不支持延迟写入操作但是我在实验时的确看到了延迟的效果;
3.> 以上我的代码中关于 Tie::File 模块的用法是否正确, 还请您给予指点; 为了看到效果我加了一个 <STDIN> 也不知道是不是合适;

期待您的回复, 谢谢您...

   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
36 [报告]
发表于 2015-12-06 22:46 |只看该作者
如果大家看到我代码中存在什么问题请大家给予指点及帮助.
对于此模块的使用网上一些文章涉及到延迟写入的文章较少, 帮助文档中都是示例性的一个个小片段. 加上我本人的水平非常菜, 在使用上有好多不明白的地方.
如果您看到此贴的内容, 还请您帮助及支持...

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
37 [报告]
发表于 2015-12-07 11:02 |只看该作者
本帖最后由 sunzhiguolu 于 2015-12-07 11:05 编辑

自己顶顶, 希望路过的大神能够给予解答... 谢谢大家了...
另外, 如果我的问题比较幼稚, 没法回答. 您提供一个学习的链接也行, 我自行查看...

论坛徽章:
0
38 [报告]
发表于 2015-12-07 13:28 |只看该作者
看一个模块是否是核心模块, 用corelist 命令就可以, 属于安装好perl之后就有的命令:

C:\Users\Oliver>corelist Tie::File

Data for 2014-01-09
Tie::File was first released with perl v5.7.3

评分

参与人数 2可用积分 +6 信誉积分 +10 收起 理由
MMMIX + 6 赞一个!
sunzhiguolu + 10 很给力!

查看全部评分

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
39 [报告]
发表于 2015-12-07 14:25 |只看该作者
本帖最后由 sunzhiguolu 于 2015-12-07 14:27 编辑

回复 38# kingfighters
  1. corelist Tie::File
复制代码
谢谢您的帮助, 很好用!

   

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
40 [报告]
发表于 2015-12-07 19:53 |只看该作者
回复 26# MMMIX
大神您好, 您能否提供一个关于使用 Tie::File 模块的延迟写入的一个小例子? (简单说明问题就好) 谢谢您, 期待您的回复, 等待您的指点...

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP