help

help

help
本人有这样一个文件:
Packet SeqNumber Time
-------------------------------------
00014, 77940BB3, 0.000_007_440, TX
00061, 77941167, 0.000_018_800, TX
00112, 7794171B, 0.000_031_896, TX
00154, 77941CCF, 0.000_041_672, TX
00201, 77942283, 0.000_053_272, TX
00201, 77942283, 0.000_053_272, TX
00254, 77942837, 0.000_067_424, TX
00293, 77942DEB, 0.000_076_696, TX
00357, 7794339F, 0.000_099_832, TX
00404, 77943953, 0.000_112_168, TX
00453, 77943F07, 0.000_123_352, TX
00499, 779444BB, 0.000_134_280, TX
00540, 77944A6F, 0.000_145_504, TX
我要比较SeqNumber有没有一样的,我写了这样一段代码:
open(MYfile,"123.txt");
my @temp = <MYfile>;
close(MYfile);
open(Rfile,">hx.txt");
print Rfile "the same data is:\n";
#open(LINE,"123.txt");

for(my $j=1;$j<@temp;$j++)
{

$line = $temp[$j];
($Packet,$SeqNumber,$Time,$Direct)=split(",",$line);
# next if($Direct ne " TX");
for($i=1+$j;$i<@temp;$i++)
{
my $Tline = $temp[$i];
($tPacket,$tSeqNumber,$tTime,$tDirect)=split(",",$Tline);
next if($tDirect ne $Direct);
if($SeqNumber eq $tSeqNumber)
{
print Rfile "$Packet\tand\t$tPacket\n";
}
}
if($j>1000)
{return 1;}
}
close(Rfile);
1;
好象能完成任务,可是如果文件超过1000行它就变的很慢很慢,哪位高手帮帮优化一下,谢谢啦!!!
试试使用hash表来比较: 试试使用hash表来比较:
从第一行开始,以$SeqNumber为关键字将此行数存到hash表内。
$hash{$SegNumber} = $j ;
从第二行开始,存入表之前先判断以该行$SeqNumber为关键字的表项是否存在
if ( define $hash{$SeqNumber} )
如果存在则是重复。
这样就只用读一次,而且hash表的操作很快。应该要提高一些速度。