废话不多讲,直接上需求
有一个文件,里面每一行保存一条记录,每一条记录有两个字段,第一个字段为数字,第二个字段表示被提取的内容,第一个字段表示内容在对应文件的行数。
现在,我假定行数相同的内容划分为同一类。需要做的就是,统计总共有多少类,并将每条记录所属类别标记出来,写到文件中。。
下面是源代码(countCLS.pl):
1 #!/usr/bin/perl
2 my $in = $ARGV[0];
3 my @cls;
4 die "no input file" if(!defined($in));
5 open(RH,$in) or die "Cannot read $in:$!";
6 my @lines = ;
7 close RH or die "Cannot close $in:$!";
8 for(my $i = 0; $i < @lines; $i++){
9 my @fields = split(/\t/,$lines[$i]);
10 #&check($fields[0],*cls);
11 my $j;
12 for($j = 0; $j < @cls; $j ++){
13 if($fields[0] == $cls[$j]){
14 print "$j\n";
15 last;
16 }
17 }
18 if($j >= @cls){
19 print "$j\n";
20 push(@cls,$fields[0]);
21 }
22 }
23 print "MAX:".scalar(@cls)."\n";
分析:
首先将文件读到数组中,对每一行执行下面的操作,首先将该行split到数组里,然后,查询cls数组,看该行的行数字段是否存在于cls数组中,如果存在,说明这一类已经存在了,打印类的索引,若不在数组中,说明这一类刚刚出现,打印数组个数,然后将该行数放入数组中。
需要意识到的是,首先perl中的数组是动态数组,是你在程序运行过程中动态可以添加的,这点使得程序设计方便了一些,试想在没有动态数组的情况下,至少首先需要一个够大的静态数组,然后还得配一个记录数组个数的变量。再有就是,perl中提供了push函数,又方便一些。。。虽然。可以将20行改成 $cls[$j] = $fields[0]...
阅读(2301) | 评论(0) | 转发(0) |