免费注册 查看新帖 |

Chinaunix

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

perl文本处理,大家帮忙看看 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-05-03 10:55 |只看该作者 |倒序浏览
本帖最后由 南宫慕容007 于 2016-05-03 15:42 编辑


在一个文件里有很多类似于上面文本格式的文本,都是按一定顺序排好的。我想检查每一段是否包含0 4700000 sil -2540.468994 !SENT_START和36100000 36600000 sil -249.693359 !SENT_START这样的两句话(这两句话在每一段文本的第二句和和倒数第二句,最后一句十个句号占一行),且这两句话都要满足第二个数字减第一个数字大于400000,如果不满足其中的任一条件,则将这一段文本的第一句打印出来,也就是打印"chengwenqiang_near_013_stn2.rec"这句话。可能有点难理解,我想了好久了还是没找到解决办法。一行一行的读取文本好像很难解决这个问题吧。

论坛徽章:
0
2 [报告]
发表于 2016-05-03 17:28 |只看该作者
  1. #!/usr/bin/perl
  2. #use warning;

  3. $/ = '..........';
  4. my (@block, $a, $b, $c,$d,$e,$flag);
  5. while (<DATA>) {
  6.   @block = split /\r|\n/,$_;
  7.   
  8.    
  9.   $a = ($block[0] =~ /^\s*$/)?$block[1]:$block[0];
  10.   $b = ($block[0] =~ /^\s*$/)?$block[2]:$block[1];
  11.   $c = $block[$#block - 1];
  12.   
  13.   if ( not ( ((split /\s+/,$b)[1] - (split /\s+/,$b)[0] > 400000) && ((split /\s+/,$c)[1] - (split /\s+/,$c)[0] > 400000) ) ) {
  14.     print $a,"\n";
  15.   }
  16. }


  17. __DATA__
  18. "abc.txt"
  19. 0 4700000 sil -2540.468994 !SENT_START
  20. dfdfdfdf
  21. dfdfd
  22. ffff
  23. ffdfdf
  24. dddddd
  25. 36100000 36600000 sil -249.693359 !SENT_START
  26. ..........
  27. "bcd.txt"
  28. 0 470000 sil -2540.468994 !SENT_START
  29. dfdfdfdf
  30. dfdfd
  31. ffff
  32. ffdfdf
  33. dddddd
  34. 36100000 36600000 sil -249.693359 !SENT_START
  35. ..........
  36. "cde.txt"
  37. 0 4700000 sil -2540.468994 !SENT_START
  38. dfdfdfdf
  39. dfdfd
  40. ffff
  41. ffdfdf
  42. dddddd
  43. 36100000 3660 sil -249.693359 !SENT_START
  44. ..........
复制代码

论坛徽章:
0
3 [报告]
发表于 2016-05-03 23:30 |只看该作者
@block = split /\r|\n/,$_;这一句是把整个文件都放到一个数组中了吗回复 2# gaoquanlong


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP