老实说你的叙述我看不太懂,
你应该是把右边那排资料当作号码, 左边的资料当作出现次数
然后把出现的次数全部加总对吧
以下依据我的理解实作, 我就不读档了
1. 我把你资料每一行读到 @strings 作为字串阵列
2. 利用正规表示式把资料取出到 $1 $2
$2 当作 anonymous hash 的 key, $1 为其值, 建立 hash
将 $1 转为数字 scalar, 加总后存回
3. 排序后印出
希望是你要的囉
#!/usr/bin/perl
#1
my @strings = split '\n',
"
0 1
0 2
0 3
0 4
1 1
0 2
2 3
1 4
0 1
1 2
";
#2
foreach (@strings) {
$data->{ $2 } += int($1) if /(\d+)\s*(\d+)\s*/;
}
#3
print "Number: $_, Times: $data->{ $_ } \n"
for sort keys %{ $data };
程式输出:
Number: 1, Times: 1
Number: 2, Times: 1
Number: 3, Times: 2
Number: 4, Times: 1
※ 引述《hws110 ( only you )》之铭言:
: ※ 引述《flu (Crazy Rhythm)》之铭言:
: : my $name_of_file_in = "aaa_inc"; #读入的档案
: : if (-e $name_of_file_in)
: : print "$name_of_file_in exist\n";
: : open (FILE , "<". $name_of_file_in);
: : ^^^^^
: : #<FILE>会把读入的内容写入$_
: : my @filtered = ( $_ =~ m/^ [\s\t]* (\d+) [\s\t]+ (\d+) /x);
: : #下面这行和我的版本不同
: 这里我有key错 是原本的 $count_of_si{ $filtered[1] }++; 才对
: 我试了一下
: 发现show出的内容是
: $var1 = 7
: $var2 = 7
: $var3 = 7
: $var1 = 6
: $var2 = 7
: $var3 = 2
: 上行表示1、2、3全部的个数
: 下行表示1、2、3中0的个数
: 我比对档案的内容是这样没错
: 而我还有个问题是
: 如果我想print出 1全部有几个,1里面的0有几个
: 也就是所有读入的数字(1.2.3...)个别print出来个数与所含的0的个数
: 那我要怎么表示呢?
: 感谢回答~