perl写的文件对比程序源码,改改就能用了。
来源:互联网 发布:illustrator cc mac 编辑:程序博客网 时间:2024/04/29 21:22
#!/usr/local/bin/perl -w
use strict;
use File::Find;
my $path = ".";
###目录下的文件打包到下面这个数组
my @mydir;
###要对比的两个文件
my ($fileOne,$fileTwo);
###存1号文件用的数组
my %mingzhi;
####读取目录文件
find(/&process, $path);
sub process {
if($_ =~ /(/.txt$)/){
#print $_."/n";
push (@mydir,$_);
}
}
#print join "/n",@mydir;
#print "/n";
my $i = 1;
foreach my $myfile (@mydir){
print $i." : ".$myfile."/n";
$i++;
}
&enterthenum;
if (($fileOne)and($fileTwo)) {
&suchu ($fileOne,$fileTwo);
};
print "对比结束,祝你愉快";
if (<STDIN>){};
#################下面全是子函数
#########提示用户输入
sub enterthenum {
print "请猪选择要对比的文件"."/n";
chomp(my $x= <STDIN>);
#my ($z,$y) = $x =~ /(/d+)/s+(/d+)/;
if ($x =~ /(/d+)/s+(/d+)/){
($fileOne,$fileTwo) = ($1,$2);
print "您输入的是:"."$fileOne"."号"." 和"." $fileTwo"."号"."文件/n";
} else {
print "你有病啊?乱选!填数字喔"."/n";
}
}
sub suchu {
my ($agr1,$agr2) = @_;
my (%agrhash1,%agrhash2);
%agrhash1 = &inputhash($mydir[($agr1-1)]);
my @paixu = &array(/%agrhash1);
&write(/@paixu,($mydir[($agr1-1)]."顺序表"));
%agrhash2 = &inputhash($mydir[($agr2-1)]);
my @paixu2 = &array(/%agrhash2);
&write(/@paixu2,($mydir[($agr2-1)]."顺序表"));
my @array = &thedifference(/%agrhash1,/%agrhash2);
&jieguo(@array);
my %toushia = &findtoushi(/%agrhash1);
my %toushib = &findtoushi(/%agrhash2);
my @arraytoushi = &thedifference(/%toushia,/%toushib);
&jieguotoushi(@arraytoushi);
#my ($ohave,$thave,$diffe) = @array;
#&write(/@{$ohave},($mydir[($agr1-1)]."独有"));
#&write(/@{$thave},($mydir[($agr2-1)]."独有"));
#&write(/@{$diffe},("两者共有"));
#&write(/@{$array[0]},($mydir[($agr1-1)]."独有"));
#&write(/@{$array[1]},($mydir[($agr2-1)]."独有"));
}
sub jieguo {
my ($ohave,$thave,$diffe) = @_;
&write(/@{$ohave},("A独有"));
&write(/@{$thave},("B独有"));
&write(/@{$diffe},("两者共有"));
}
sub jieguotoushi {
my ($ohave,$thave,$diffe) = @_;
&write(/@{$ohave},("A独有头饰"));
&write(/@{$thave},("B独有头饰"));
&write(/@{$diffe},("两者共有头饰"));
}
sub findtoushi {
my ($toushi) = @_;
my %have;
foreach my $weibiao (keys %{$toushi}){
if(($weibiao >= 5000) and $weibiao <= 6000){
$have{"$weibiao"} = ${$toushi}{$weibiao};
}
}
return %have;
}
######读取文本文件返回hash
sub inputhash {
my ($linshi) = @_;
my %hash;
open(FILE, "<$linshi") or die "文件打开失败 ";
while(<FILE>){
if (/^(/d+)/#([/x80-/xff]+)/#/) {
my $x=$1;
my $y=$2;
#print $x."=>".$y."/n";
$hash{"$x"} = $y;
#push(%mingzhi,($x => $y));
}
}
close FILE;
return %hash;
}
#####清除原有文件,并把数组写入文件
sub write {
my ($arry,$linshi) = @_;
$linshi =~ s//.txt//g;
open(FILE, "+>$linshi.txt") or die "文件打开失败 ";
foreach my $hashref (@{$arry}) {
#my($key, $value) = each %$hashref;
my($key, $value) = %{$hashref};
print FILE "$key/#$value/n";
#print "$key/#$value/n";
}
close FILE;
}
###对hash数组按KEY进行排序 参数是一个hash引用
sub array {
my ($hash) = @_;
my @paixu = map { { ($_ => ${$hash}{$_}) } }
sort {$a <=>$b} keys %{$hash};
return @paixu;
}
sub thedifference {
my ($onehash,$twohash) = @_;
my %onehave;
my %twohave;
my %thrhave;
my @fuck;
######找出1有2没有的
foreach my $weibiao (keys %{$onehash}){
if(!(${$twohash}{$weibiao})) {
$onehave{"$weibiao"} = ${$onehash}{$weibiao};
}
}
######找出2有1没有的
foreach my $weibiao (keys %{$twohash}){
if(!(${$onehash}{$weibiao})) {
$twohave{"$weibiao"} = ${$twohash}{$weibiao};
}
}
######找出两者共有的
foreach my $weibiao (keys %{$twohash}){
if(${$onehash}{$weibiao}){
$thrhave{"$weibiao"} = ${$onehash}{$weibiao}."#".${$twohash}{$weibiao};
}
}
my @fuck1 = &array(/%onehave);
my @fuck2 = &array(/%twohave);
my @fuck3 = &array(/%thrhave);
@fuck = (/@fuck1,/@fuck2,/@fuck3);
return @fuck;
}
- perl写的文件对比程序源码,改改就能用了。
- 搜集的一些项目源码,改改就能用
- 又搜集一批项目源码,同样改改就能用
- [Ant存档]改改就行了,省得老写
- hdu 3926 瞎改改就过了。。。
- 简单网页版的年会抽奖程序,设计个界面套上就可以了,抽奖员工编号姓名改改代码就可以了,很简单的
- c做登录系统(是简单了点,但我想改改就可以用的)
- 什么时候,写程序用中文,以后写程序就你写小说一样的了
- 就仿照别人的程序写了这个
- perl写的小程序
- 谁能用C语言给我写一个可以计算加减乘除的程序(只用算整数就OK)
- 我的FVWM 配置文件,发在这里吧,需要的朋友改改图标就可以用了
- 用C写一个程序,打印出所有的源程序,要求不能用文件。
- 用 Windows 7 的同学明天就能用 IE10 了
- 按钮的类别 倒计时一句代码就能用了
- 用perl,ruby和python各写了一段相同的程序弯沉功能
- 两断小代码、改改就拿去做 git的增量发布
- 用Perl写的FTP客户端程序
- 今天离婚,你得抱我出门 !
- 我的学习笔记_Windows_HOOK编程 2009-12-03 11:19
- 写在前面
- 快乐是一种感觉
- 33种Javascript表格排序控件
- perl写的文件对比程序源码,改改就能用了。
- 使用for循环实现Datalist的分列显示功能
- ado.net入门
- 追MM之代理模式学习笔记[C++版]
- 文本的导入导出和SQL脚本的执行方法
- 手动彻底清除恶意网页病毒
- Red hat 5 安装 SN
- DataBinder所有用法
- PPPoe简介