我有一个数据集,喜欢做一个简单的
while
以下是从数据集中提取的一个小样本:
1、“DZA”、“阿尔及利亚”、“0.01”、7.44,47.3,0.46,0,0,0.13
2,“前”、“安哥拉”、“0.00”、6.79、“空”、0.21,1,0,0.28
3,“本”,“贝宁”,“-0.01”,7.02,38.9,0.27,1,0,0.05
4,“BWA”,“博茨瓦纳”,“0.06”,6.28,45.7,0.42,1,0,0.07
5,“HVO”、“布基纳法索”、“0.00”、6.15,36.3,0.08,1,0,0.05
6、“布隆迪首都”、“布隆迪”、“0.00”、6.38,41.8,0.18,1,0,0
,
分隔字段并存储最高值
排列成一个数组。
@maxl = map length, @terms;
while(`<INFILE>`) {
$_ =~ s/[\"\n]//g ;
@terms = split/$sep/, $_;
@lengths = map length, @terms;
for($k = 0, $k <= $#terms, $k++) {
if($lengths[$k] > $maxl[$k]) {
$maxl[$k] = $lenghts[$k];
}
}
print "@lengths\n";
}
现在
@maxl
使用代码中使用数据集第二行的较早部分。
当我使用
print
命令只查看
@马克斯
我得到的行动:
1 3 7 4 4 4 4 1 1 5
我用了另一个
打印
语句仅为了查看其他值,我得到:
1 3 6 4 4 4 4 1 1 4
1 3 5 5 4 4 4 1 1 4
1 3 8 4 4 4 4 1 1 4
1 3 12 4 4 4 4 1 1 4
1 3 7 4 4 4 4 1 1 1
1 3 8 4 4 4 4 1 1 4
1 3 10 4 4 4 4 1 1 4
1 3 16 5 4 4 4 1 1 4
2 3 4 5 3 4 4 1 1 4
2 3 7 4 4 4 4 1 1 4
2 3 5 4 4 4 4 1 1 4
2 3 5 4 4 4 4 1 1 4
2 3 8 4 4 4 4 1 1 4
2 3 5 4 4 4 1 1 1 4
第四列eg的值明显大于3
循环应该保存最大值并将这些值替换为
@马克斯
.
出了什么问题?
for
循环逗号是错误的
for($k = 0, $k <= $#terms, $k++)