Ich habe ein Dataset und möchte eine einfache while
-Operation mit einem Perl-Skript durchführen. Hier ist ein kleiner Ausschnitt aus dem Datensatz:
"number","code","country","gamma","X1","X2","X3","X4","X5","X6" 1,"DZA","Algerien","0.01",7.44,47.3,0.46,0,0,0.13 2,"AGO","Angola","0.00",6.79,"NULL",0.21,1,0,0.28 3,"BEN","Benin","-0.01",7.02,38.9,0.27,1,0,0.05 4,"BWA","Botswana","0.06",6.28,45.7,0.42,1,0,0.07 5,"HVO","Burkina Faso","0.00",6.15,36.3,0.08,1,0,0.05 6,"BDI","Burundi","0.00",6.38,41.8,0.18,1,0,0
Das Skript soll die Länge jedes durch ,
getrennten Feldes zählen und die höchsten Werte in einem Array speichern.
Allerdings funktioniert das Speichern nicht richtig. Hier ist ein Teil des Codes:
@maxl = map length, @terms;
while(``) {
$_ =~ 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";
}
Jetzt verwendet @maxl
einen früheren Teil des Codes, in dem die zweite Zeile des Datensatzes verwendet wird. Wenn ich einen print
-Befehl nur verwende, um die Werte der @maxl
-Operation zu sehen, erhalte ich:
1 3 7 4 4 4 4 1 1 5
In der while
-Schleife benutzte ich einen weiteren print
-Befehl, um die anderen Werte zu sehen, erhalte ich:
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
Die vierte Spalte hat offensichtlich Werte, die größer als 3 sind. Die while
-Schleife sollte die größten Werte speichern und diese Werte in @maxl
substituieren.
Was ist schiefgelaufen?
...in der for
-Schleife sind die Kommas falsch
for($k = 0, $k <= $#terms, $k++)
Nachdem das behoben wurde, scheint es immer noch ein Problem zu geben...