紧急求助,大家帮忙啊!送上100分.
haokk 2002-08-05 11:04:38 文件的格式是象下面这样,然后不断重复,见后面的文件:
Query = text1.txt filetype.txt file:
(380)
Score = 30 hi = 50, Except = 0.056
Query: 120 abcdefg 160
Score = 30 hi = 50, Except = 0.05
Query: 130 abcdefg 150
Score = 30 hi = 50, Except = 0.45
Query: 130 abcdefg 160
现在要做的是:如果它满足Except<0.1那么求Query的差值的和,如:Except = 0.056 (小于0.1),160-120 =40;Except = 0.05(小于0.1) ,150-130 = 20 ,Except=0.45(大于0.1),差值舍去。
所以Query的差值的和为:40+20=60 ;若 Query的差值的和即60除以380 后小于0.5,那么就取出 text1.txt这个名字,把它放到report.txt中.
我现在只能通过配匹得到一些值,但是对于循环的结构没有弄清楚.而且如果一行一行的读的话,怎麽保存值啊.
我写的perl的程序是这样的:
#!/perl/bin/perl -w
my $REPORT_FILE = "report.txt";
my $input_file = $ARGV[0] || 'input.dat';
unless ( -e $input_file ) {
die "$0: ERROR: missing file: $input_file";
}
open (INFILE, $input_file) or die "$0: ERROR: $input_file: $!";
while (my $line = <INFILE>) {#这里面肯定还要循环,我找不到分组单位循环)
# query name
if($line =~/^(Query).*:$/){
@words = split(/s+/,$line);
$name = $words[2];
}
#total query letters
if($line =~/^\s+\((\d+)\)$/){
$query_letters = $1 ;
}
#if except value<1e1,then count $query num.
if($line =~/\sScore.*\d+/ ){
@words=split(/\s+/,$line);
$Except = $words[8];
if($Except < 1e1){
# 计算$query的值,并加起来.$Quey_total
}
}
#如果$Query_total/$query_letters<0.5 ,那么把 $name 输出到report.txt中去.
}
close(INFILE);
close(REPORT);
文本格式如下:
Query = text1.txt filetype.txt file:
(680)
Score = 30 hi = 50, Except = 0.35
Query: 120 abcdefg 160
Score = 30 hi = 50, Except = 0.45
Query: 130 abcdefg 150
Score = 30 hi = 50, Except = 0.45
Query: 130 abcdefg 150
Query = text2.txt filetype.txt file:
(380)
Score = 30 hi = 50, Except = 0.35
Query: 120 abcdefg 160
Score = 30 hi = 50, Except = 0.45
Query: 130 abcdefg 150
Score = 30 hi = 50, Except = 0.45
Query: 130 abcdefg 160
Query = text3.txt filetype.txt file:
(380)
Score = 30 hi = 50, Except = 0.01
Query: 120 abcdefg 160
Score = 30 hi = 50, Except = 0.45
Query: 130 abcdefg 150
Score = 30 hi = 50, Except = 0.45
Query: 130 abcdefg 160
Query = text4.txt filetype.txt file:
(380)
Score = 30 hi = 50, Except = 0.35
Query: 120 abcdefg 160
Score = 30 hi = 50, Except = 0.45
Query: 130 abcdefg 150
Score = 30 hi = 50, Except = 0.45
Query: 130 abcdefg 160
......