免费注册 查看新帖 |

Chinaunix

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

差异筛选问题 [复制链接]

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
21 [报告]
发表于 2014-08-05 13:58 |只看该作者
回复 18# newfinder

那你得给出初始文本和目标文本
   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
22 [报告]
发表于 2014-08-05 14:00 |只看该作者
data1.txt 和 data2.txt 有多少行 ~ {:2_172:}

回复 20# newfinder


   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
23 [报告]
发表于 2014-08-05 14:22 |只看该作者
my friend ~ {:2_172:}
  1. #!/usr/bin/perl
  2. # gensource.pl

  3. for my $RANGE ( 1 .. 50 ) {                 # change: 50
  4.     my $BEGIN = 0;
  5.     my $add   = int rand 10;                # change: 10
  6.     for my $i ( 1 .. 1000 + $add ) {        # change: 1000
  7.         my $r1 = $BEGIN + 1 + int rand 5;    # change: 5
  8.         my $r2 = $r1 + 1 + int rand 20;      # change: 20
  9.         print "range$RANGE:$r1-$r2\n";
  10.         $BEGIN = $r2;
  11.     }
  12. }

  13. __DATA__

  14. for SPEED TEST.
  15. perl gensource.pl > data1.txt
  16. perl gensource.pl > data2.txt
复制代码
回复 21# yestreenstars


   

论坛徽章:
0
24 [报告]
发表于 2014-08-05 22:12 |只看该作者
回复 21# yestreenstars
大侠,初始文本和目标文本就如13楼提出的那样……


   

论坛徽章:
0
25 [报告]
发表于 2014-08-05 22:15 |只看该作者
回复 22# pitonas
这两个文本各自也就5000到6000行左右

   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
26 [报告]
发表于 2014-08-06 10:36 |只看该作者
小伙伴们 ~ {:2_168:}
若在代码试用过程中有任何不适, 请即时停用..

回复 25# newfinder
  1. #!/usr/bin/perl

  2. # input files, and output files
  3. my @input  = qw[data1.txt data2.txt];
  4. my @output = qw[diff1.txt diff2.txt comm.txt];
  5. my @files  = map { open my $f, '>', $_; $f } @output;
  6. my %data;

  7. for my $i ( 0 .. 1 ) {
  8.     @ARGV = shift @input;
  9.     while (<>) {
  10.         chomp;
  11.         my ( $r, $R ) = split /:/;
  12.         push @{ $data{$r}[$i] }, $R;
  13.     }
  14. }

  15. my @range = map { $_->[1] } sort { $a->[0] <=> $b->[0] }
  16.   map { [ /(\d+)/, $_ ] } keys %data;

  17. for my $r (@range) {
  18.     my ( $begin, $B, %com ) = ( 0, $data{$r}[1] );
  19.     my @B = map [ split /-/ ], @$B;

  20.     for my $A ( @{ $data{$r}[0] } ) {
  21.         my @A = split /-/, $A;
  22.         
  23.         for my $i ( $begin .. $#B ) {
  24.             $B[$i][1] <= $A[0] and next;
  25.             $B[$i][0] >= $A[1] and do { $begin = $i; last };
  26.             $B[$i][1] >= $A[1]
  27.               ? $B[$i][0] <= $A[0] || $A[1] - $B[$i][0] > 2
  28.               : $B[$i][0] >= $A[0] || $B[$i][1] - $A[0] > 2
  29.               and print { $files[2] } "$r:$A $B->[$i]$/"
  30.               and ( $com{0}{$A}, $com{1}{ $B->[$i] } ) = (undef) x 2;

  31.             $B[$i][1] >= $A[1] and do { $begin = $i; last }
  32.         }
  33.     }

  34.     for my $n ( 0 .. 1 ) {
  35.         for ( @{ $data{$r}[$n] } ) {
  36.             exists $com{$n}{$_} or print { $files[$n] } "$r:$_$/";
  37.         }
  38.     }
  39. }
复制代码

论坛徽章:
0
27 [报告]
发表于 2014-08-06 11:23 |只看该作者
回复 26# pitonas
不知大侠指的不适是什么呢?

   

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
28 [报告]
发表于 2014-08-06 11:33 |只看该作者

例如: 因错误的答案, 导致胸闷丶心悸丶呼吸不过来丶头晕 ...

回复 27# newfinder


   

论坛徽章:
0
29 [报告]
发表于 2014-08-06 15:00 |只看该作者
回复 28# pitonas
呃……
大侠调皮了……

   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
30 [报告]
发表于 2014-08-06 15:49 |只看该作者
回复 29# newfinder

25楼能否解决你的问题?

我改一下我的脚本看能不能满足~
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP