免费注册 查看新帖 |

Chinaunix

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

小菜求助:获取指定序列 [复制链接]

论坛徽章:
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
11 [报告]
发表于 2016-09-13 22:33 |只看该作者
回复 10# ahy114

经过你对第二个文件的修改, 发现我对第一个文件与第二个文件之间的 大区间 与 小区间之间的关系有点糊涂了; 最后得出的结果与区间的数值之间有什么关系请再举例说明一下.

论坛徽章:
0
12 [报告]
发表于 2016-09-13 23:20 |只看该作者
回复 11# sunzhiguolu

我用下面这个图说明了下

截图.png (37.36 KB, 下载次数: 96)

截图.png

论坛徽章:
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
13 [报告]
发表于 2016-09-14 14:59 |只看该作者
回复 12# ahy114
试下,
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;

  4. sub load_data{
  5.     local @ARGV = shift;
  6.     my $data = shift;
  7.     my $merge = defined $data;
  8.     my %hCnt;
  9.     while (<>){
  10.         next if (/\A\D/);
  11.         my ($group, $start, $stop, $type) = /\w+/g;
  12.         if ($merge){
  13.             if (exists $data->{$group}{$type}){
  14.                 $hCnt{$group,$type}++ ? push (@{$data->{$group}{$type}}, [$start, $stop]) : ($data->{$group}{$type}->[0][-1] = $stop);
  15.             }
  16.             next;
  17.         }
  18.         push (@{$data->{$group}{$type}}, [$start, $stop]);
  19.     }
  20.     $data;
  21. }

  22. my ($data, $grpID);
  23. $data = load_data (shift, $data);
  24. $data = load_data (shift, $data);

  25. while (<>){
  26.     if (/\A>(\d)/){
  27.         $grpID = $1;
  28.         next;
  29.     }
  30.     next if (!exists $data->{$grpID});
  31.     my $line = $_;
  32.     foreach my $intervals (values %{$data->{$grpID}}){
  33.         my $str = "";
  34.         foreach (@$intervals){
  35.             my ($start, $stop) = @$_;
  36.             $start -= 1;
  37.             $str .= substr ($line, $start, ($stop - $start));
  38.         }
  39.         print "$str\n";
  40.     }
  41. }

复制代码

perl abc.pl a b c
-----------------------------------
1223abc
33aab


论坛徽章:
0
14 [报告]
发表于 2016-09-18 00:34 |只看该作者
完美,感谢大神的帮助!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP