忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
12
最近访问板块 发新帖

perl两个文本库对比融合输出到第三个文本中,同一个坐标数据相同用A表示,不同B表示。 [复制链接]

论坛徽章:
0
发表于 2018-01-09 09:56 |显示全部楼层
回复 10# 本友会机友会摄友会

不好意思,这两天我才学习了Unicode的相关知识,但我的系统有点问题,没能读出“.psl”。我还有一个问题:
我的A,B文本数据是圆形的(不是严格等距递增),例如:
      gj1k
    g5kn1k
  d6ig7n130
  dfkl35hbn
   83onbdf
    jkdhl9
     lkgt
或者四角的空格用一个点“.”或“0”表示:
......gj1k......
....g5kn1k....
..d6ig7n130.
..dfkl35hbn..
...83onbdf...
.....jkdhl9.....
......lkgt.......

我在判断的时候需要对比“中间圆形字符”,四角的直接输出“.”。
我想加一个if()判断,如果A文件是“\n”或“.”或“0”,则输出“.”,else再进行eq对比判断。
可是在If()括号里我该怎么表示文件的每一个元素呢?或者怎么区分字母数字和空格?实验几次输出的结果要么全是“.”,要么那一行只有一个“.”
不知道这样个想法对不对,请求支援,谢谢!

论坛徽章:
0
发表于 2018-01-09 11:05 |显示全部楼层
回复 10# 本友会机友会摄友会

不会删帖子,刚才自己搞出来了!见笑了~~,我是在原来的脚本上改的。如下:会有错,但输出文件正确。
open(FHA, '<A.txt') or die "can't open A.txt\n";               
open(FHB, '<B.txt') or die "can't open B.txt\n";
open(OUT,'>E.txt') or die "can't open E.txt\n";

while (my $m = <FHA>) {                                       
    my $n = <FHB>;                                             
    chomp $m;                                                  
    chomp $n;
    print OUT X($m,$n), "\n";                                             
}                                                              
sub X{                                                         
    my ($m, $n) = @_;                                          
    my ($r) = "";                                             
    for (0..length($m)-1) {
       if ((substr($m, $_, 1) == "0") && (substr($n, $_, 1) == substr($m, $_, 1)))
       {
         $r .= ".";
       }

       else
       {
         $r .= (substr($m, $_, 1) eq substr($n, $_, 1)?'A':'z');
       }                                   
    }                                                         
    return($r);                                                   
}


论坛徽章:
0
发表于 2018-01-09 11:05 |显示全部楼层
回复 10# 本友会机友会摄友会

不会删帖子,刚才自己搞出来了!见笑了~~,我是在原来的脚本上改的。如下:会有错,但输出文件正确。
open(FHA, '<A.txt') or die "can't open A.txt\n";               
open(FHB, '<B.txt') or die "can't open B.txt\n";
open(OUT,'>E.txt') or die "can't open E.txt\n";

while (my $m = <FHA>) {                                       
    my $n = <FHB>;                                             
    chomp $m;                                                  
    chomp $n;
    print OUT X($m,$n), "\n";                                             
}                                                              
sub X{                                                         
    my ($m, $n) = @_;                                          
    my ($r) = "";                                             
    for (0..length($m)-1) {
       if ((substr($m, $_, 1) == "0") && (substr($n, $_, 1) == substr($m, $_, 1)))
       {
         $r .= ".";
       }

       else
       {
         $r .= (substr($m, $_, 1) eq substr($n, $_, 1)?'A':'z');
       }                                   
    }                                                         
    return($r);                                                   
}


论坛徽章:
0
发表于 2018-01-09 11:05 |显示全部楼层
回复 10# 本友会机友会摄友会

不会删帖子,刚才自己搞出来了!见笑了~~,我是在原来的脚本上改的。如下:会有错,但输出文件正确。
open(FHA, '<A.txt') or die "can't open A.txt\n";               
open(FHB, '<B.txt') or die "can't open B.txt\n";
open(OUT,'>E.txt') or die "can't open E.txt\n";

while (my $m = <FHA>) {                                       
    my $n = <FHB>;                                             
    chomp $m;                                                  
    chomp $n;
    print OUT X($m,$n), "\n";                                             
}                                                              
sub X{                                                         
    my ($m, $n) = @_;                                          
    my ($r) = "";                                             
    for (0..length($m)-1) {
       if ((substr($m, $_, 1) == "0") && (substr($n, $_, 1) == substr($m, $_, 1)))
       {
         $r .= ".";
       }

       else
       {
         $r .= (substr($m, $_, 1) eq substr($n, $_, 1)?'A':'z');
       }                                   
    }                                                         
    return($r);                                                   
}


论坛徽章:
0
发表于 2018-01-09 11:07 |显示全部楼层
回复 10# 本友会机友会摄友会

大神我自己弄出来了!不会删帖子,所以再次回复,谢谢解惑!我是在原来脚本基础上改的,给需要的人看吧:open(FHA, '<A.txt') or die "can't open A.txt\n";               
open(FHB, '<B.txt') or die "can't open B.txt\n";
open(OUT,'>E.txt') or die "can't open E.txt\n";

while (my $m = <FHA>) {                                       
    my $n = <FHB>;                                             
    chomp $m;                                                  
    chomp $n;
    print OUT X($m,$n), "\n";                                             
}                                                              
sub X{                                                         
    my ($m, $n) = @_;                                          
    my ($r) = "";                                             
    for (0..length($m)-1) {
       if ((substr($m, $_, 1) == "0") && (substr($n, $_, 1) == substr($m, $_, 1)))
       {
         $r .= ".";
       }

       else
       {
         $r .= (substr($m, $_, 1) eq substr($n, $_, 1)?'A':'z');
       }                                   
    }                                                         
    return($r);                                                   
}

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

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP