JoakimMedlem sedan dec. 199982 inlägg 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
JojoxxMedlem sedan juni 20004 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
JoakimMedlem sedan dec. 199982 inlägg Tackar!
Jag strukurerade om filen istället. Funkar fint nu.
// Joakim
cyaMedlem sedan okt. 200010 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