Joakim Medlem sedan dec. 1999 82 inlägg Frågan 5 apr. 2001 15:46 #1 Morsning!
Sitter och klurar på en liten grej. Låt oss säga att jag har en enkel textfils databas med rader av typen:
IDNUMMER|NAMN|TELEFONNUMMER
Jag har ett gäng såna rader i min fil. Jag läser in filen och har raderna "o-splittade" i @database. Om jag vill sortera raderna i bokstavsordning efter namnfältet innan jag splittar varje rad och skriver ut den, hur går jag till väga då?
Exempel:
1|Bertil Johansson|123457
2|Adam Johansson|123456
3|Curt Johansson|123458
Jag vill sortera dom till:
2|Adam Johansson|123456
1|Bertil Johansson|123457
3|Curt Johansson|123458
innan jag börjar splitta raderna till variabler och skriva ut databasinnehållet. Någon som kan upplysa mig?
Tack på förhand!
------------------
:.....
Joakim Johansson
Vice VD / tekniker
Stereo Communication
J Jojoxx Medlem sedan juni 2000 4 308 inlägg Jag skulle börja med att stuva om raderna så att du får en annan kolumnfäljd (namn först) och sedan sortera som vanlig;
for($n=0;$n<=#$database;$n++){
@parts=split(/\|/,$database[$n]); $database[$n]=join('|',$parts[1],$parts[0],$parts[2]);
}
@database=sort(@database);
------------------
/ J
Joakim Medlem sedan dec. 1999 82 inlägg Tackar!
Jag strukurerade om filen istället. Funkar fint nu.
// Joakim
C cya Medlem sedan okt. 2000 10 inlägg Hej!
Man kunde också löst det så här:
#!/usr/bin/perl -w
use strict;
my @database = (
'2|Adam Johansson|123456', '3|Curt Johansson|123458',
'4|Per Johansson|123458', '5|Gustav Johansson|123458',
'1|Bertil Johansson|123457', '6|Göran Johansson|123457',
);
@database =
map { $_->[0] }
sort { $a->[2] cmp $b->[2] }
map { [ $_, ( split /\|/ ) ] }
@database;
print join "\n", @database;
Sorterings formen (map-sort-map) är känd som "Schwartzian Transform".
//Cya