免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
30
15-16赛季CBA联赛之八一
日期:2020-10-27 13:24:2315-16赛季CBA联赛之山东
日期:2020-10-27 13:24:07
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-01-02 15:59 |只看该作者 |倒序浏览
文本1:共82列,76行。0011ab1b...
cgh1111n...
.................
文本2:共82列,76行.
01b1a11c...
1bh1v1nj...
.................

结果输出文本3中:共82列,76行.
BBBABBAB...
BBBABABB...
...................
跪求大神。。

论坛徽章:
30
15-16赛季CBA联赛之八一
日期:2020-10-27 13:24:2315-16赛季CBA联赛之山东
日期:2020-10-27 13:24:07
2 [报告]
发表于 2018-01-03 09:27 |只看该作者
本帖最后由 情节可以很简单 于 2018-01-03 10:00 编辑

谢谢各位了!求别沉!我在for循环时,不知道怎样表达 对2个文件中“每个元素”进行对比,以前只处理过对某列数据提取。
下面是我尝试的两种方案:但是“@”这个符号报错,怎么用?
#########方案一
open A,"A.txt";
open B,"B.txt";
open E,">E.txt";
@a=<A>;
@b=<B>;
@a=map split @a;
@b=map split @b;
$a=@a;
for (1..$a)
{
if ($a[$_]==$b[$_])
{print E "A";}
else
{print E "B";}
}

###########方案二:"$A"报错,而且并没有输出第三个文件。
open $A, '>A.txt';                                                
open $B, '>B.txt';                                                
while ($m = <$A>) {                                               
    $n = <$B>;                                                   
    chomp $m;                                                     
    chomp $n;                                                     
    print X($m,$n), "\n";                                         
}                                                                 
sub X{                                                            
    my ($m, $n) = @_;                                             
    my $r;                                                        
    for (0..length($n)) {                                         
        $r .= substr($m, $_, 1) eq substr($n, $_, 1)?'A':'B';     
    }                                                            
    $r;                                                           
}                                                                 


论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
3 [报告]
发表于 2018-01-03 10:04 |只看该作者
回复 1# 情节可以很简单

$ cat f1.txt
0011ab1b
cgh1111n

$ cat f2.txt
01b1a11c
1bh1v1nj

$ awk -vFS="" '{getline b < "f2.txt";t=split(b,a,"");s="";for(n=1;n<=NF;++n)s=s (a[n]==$n?"A":"B");print s}' f1.txt
ABBAABAB
BBAABABB

论坛徽章:
30
15-16赛季CBA联赛之八一
日期:2020-10-27 13:24:2315-16赛季CBA联赛之山东
日期:2020-10-27 13:24:07
4 [报告]
发表于 2018-01-03 10:53 |只看该作者
回复 3# jason680

前辈您好!可能是我太缺乏搭建环境的能力,这个程序在运行时好多错误,另外我用的是Windows系统,会有影响吗?

捕获1.PNG (19.6 KB, 下载次数: 56)

捕获1.PNG

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
5 [报告]
发表于 2018-01-03 11:38 |只看该作者
回复 4# 情节可以很简单

C:\>type A.txt
0011ab1b
cgh1111n
C:\>type B.txt
01b1a11c
1bh1v1nj
C:\>perl hyj3.pl
ABBAABAB
BBAABABB

C:\>type hyj3.pl
use strict;
use warnings;

open(FHA, '<A.txt') or die "can't open A.txt\n";
open(FHB, '<B.txt') or die "can't open B.txt\n";
while (my $m = <FHA>) {
    my $n = <FHB>;
    chomp $m;
    chomp $n;
    print X($m,$n), "\n";
}
sub X{
    my ($m, $n) = @_;
    my ($r) = "";
    for (0..length($n)-1) {
        $r .= (substr($m, $_, 1) eq substr($n, $_, 1)?'A':'B');
    }
    return($r);
}

评分

参与人数 1信誉积分 +5 收起 理由
情节可以很简单 + 5 很给力!

查看全部评分

论坛徽章:
30
15-16赛季CBA联赛之八一
日期:2020-10-27 13:24:2315-16赛季CBA联赛之山东
日期:2020-10-27 13:24:07
6 [报告]
发表于 2018-01-03 14:56 |只看该作者
本帖最后由 情节可以很简单 于 2018-01-04 10:43 编辑

回复 5# jason680

谢谢大神,但是改完之后没有第三个文件输出。另外原有的2个文本A,B:其中A是我从Excel中复制到TXT文本中的,所以含有制表符或空格在其中(数据排列是圆形的,我试图去掉,但是变形了)。B文本是纯TXT。开始我以为这样不会影响比对,所以就没说明。

论坛徽章:
30
15-16赛季CBA联赛之八一
日期:2020-10-27 13:24:2315-16赛季CBA联赛之山东
日期:2020-10-27 13:24:07
7 [报告]
发表于 2018-01-03 15:42 |只看该作者
回复 5# jason680

抱歉多次打扰,但是我想说一下我目前的结果:这个程序能实现两个纯TXT文本对比,只是不能将结果输出到一个新的TXT中(在命令提示符窗口出现)。至于我原本A,B文件格式不同我再处理一下。

论坛徽章:
0
8 [报告]
发表于 2018-01-04 13:36 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
30
15-16赛季CBA联赛之八一
日期:2020-10-27 13:24:2315-16赛季CBA联赛之山东
日期:2020-10-27 13:24:07
9 [报告]
发表于 2018-01-05 16:42 |只看该作者
回复 8# 本友会机友会摄友会

您好,非常感谢回复!可是我没有运行出来啊~~我好笨敢问开头的“$utf8 = [system.Text.Encoding]::UTF8”是什么意思啊。。这与开头需要Cmd的 windowshath\...的有关吗

捕获.PNG (35.01 KB, 下载次数: 61)

捕获.PNG

论坛徽章:
0
10 [报告]
发表于 2018-01-05 17:27 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP