免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 5195 | 回复: 22
打印 上一主题 下一主题

求助用perl脚本对文件数组进行编辑 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-07-02 16:23 |只看该作者 |倒序浏览
现有的文件内容为
01_010_001-thumb.jpg       
01_010_001.html                       
01_010_002-thumb.jpg       
01_010_002.html                       
01_010_003-thumb.jpg       
01_010_003.html                       
01_010_004-thumb.jpg       
01_010_004.html                       
01_010_005-thumb.jpg       
01_010_005.html                       
01_010_006-thumb.jpg       
01_010_006.html               
...........
然后要求把带thumb的改为<page file="01_010_001.html">002</page>的形式,中间的数字要从001开始递增,现在自己写的脚本如下,
#! /usr/bin/perl
open(FILE,"thumb-file.text");
open(XMLFile,">>nothumb.xml") or die "Can't write to the file";
@withthumb=<FILE>;
@withoutthumb=grep s/\-thumb\.jpg/\.html\">/,@withthumb;
$before="<page file=\"";
foreach $line (@withoutthumb){
        $line=$before.$line
}
print @withoutthumb;
close(FILE);
结果只能出现<page file="02_040_021.html">的格式,后面的递增不知如何做。并且在$line之后添加东西的话,会自动的添加到下一行,哪位高手指点一下应该如何做。

论坛徽章:
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
2 [报告]
发表于 2016-07-02 16:43 |只看该作者
回复 1# 3009203267
把你想要的结果贴出来瞧瞧, 需求没有看明白. 谢谢.

   

论坛徽章:
0
3 [报告]
发表于 2016-07-02 17:38 |只看该作者
从第二行是开始番号递增的表示成如下的样子
<page file="Zykadia_LaunchPad.html">001</page>
<page file="01_010_001.html">002</page>
<page file="01_010_002.html">003</page>
<page file="01_010_003.html">004</page>
<page file="01_010_004.html">005</page>
<page file="01_010_005.html">006</page>
<page file="01_010_006.html">007</page>
      :
      :
      :
<page file="04_080_009.html">156</page>
<page file="04_080_010.html">157</page>
<page file="04_080_011.html">158</page>
</index>
Add Comment Collapse

论坛徽章:
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
4 [报告]
发表于 2016-07-02 17:52 |只看该作者
只处理文本带有 thumb 行并输出, 不符合要求的行忽略?

论坛徽章:
0
5 [报告]
发表于 2016-07-02 18:03 |只看该作者
回复 4# sunzhiguolu


    对,就是这个意思,把带thumb的改成统一的模式,中间还有加递增的数字

论坛徽章:
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
6 [报告]
发表于 2016-07-02 18:07 |只看该作者
回复 5# 3009203267
请将你的示例数据与真实数据的格式保持一致. 比如: <page file="Zykadia_LaunchPad.html">001</page> 这一行单独的拿出来有啥用意吗?


   

论坛徽章:
0
7 [报告]
发表于 2016-07-02 18:13 |只看该作者
回复 6# sunzhiguolu


    那个也算是要求,第一行必须写成那个样子,不过那个先无视掉也行,主要是后面的002开始的递增写法不太会写

论坛徽章:
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
8 [报告]
发表于 2016-07-02 18:43 |只看该作者
本帖最后由 sunzhiguolu 于 2016-07-02 18:49 编辑

回复 7# 3009203267
试下,
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. while (<DATA>){
  5.     if (s/(\d+\K)-thumb.*\n/.html/){
  6.         printf (qq(<page file="%s">%03d</page>\n), $_, $1 + 1);
  7.     }
  8. }

  9. __DATA__
  10. 01_010_001-thumb.jpg
  11. 01_010_001.html
  12. 01_010_002-thumb.jpg
  13. 01_010_002.html
  14. 01_010_003-thumb.jpg
  15. 01_010_003.html
  16. 01_010_004-thumb.jpg
  17. 01_010_004.html
  18. 01_010_005-thumb.jpg
  19. 01_010_005.html
  20. 01_010_006-thumb.jpg
  21. 01_010_006.html
复制代码
perl a.pl
-----------------------------------------------
<page file="01_010_001.html">002</page>
<page file="01_010_002.html">003</page>
<page file="01_010_003.html">004</page>
<page file="01_010_004.html">005</page>
<page file="01_010_005.html">006</page>
<page file="01_010_006.html">007</page>



   

论坛徽章:
0
9 [报告]
发表于 2016-07-02 18:48 |只看该作者
回复 8# sunzhiguolu


    嗯,成功了!和下面显示的一样,代码能解释一下吗?刚看perl,不太会呢还

论坛徽章:
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
10 [报告]
发表于 2016-07-02 19:16 |只看该作者
回复 9# 3009203267
while (<DATA>){
...
}

__DATA__
...
...
...

DATA 和平时使用的文件句柄是一个意思, 目的是每次进入 while 循环 都从标记 __DATA__ 后面读取一条数据记录.



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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP