webForumDet fria alternativet

Hur sortera i textfilsdatabas?

3 svar · 184 visningar · startad av Joakim

JoakimMedlem sedan dec. 199982 inlägg
#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

JojoxxMedlem sedan juni 20004 308 inlägg
#2

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(/\&#0124;/,$database[$n]); $database[$n]=join('&#0124;',$parts[1],$parts[0],$parts[2]);
}
@database=sort(@database);

------------------

/ J

JoakimMedlem sedan dec. 199982 inlägg
#3

Tackar!

Jag strukurerade om filen istället. Funkar fint nu.

// Joakim

cyaMedlem sedan okt. 200010 inlägg
#4

Hej!

Man kunde också löst det så här:

#!/usr/bin/perl -w

use strict;

my @database = (
  '2&#0124;Adam Johansson&#0124;123456',   '3&#0124;Curt Johansson&#0124;123458',
  '4&#0124;Per Johansson&#0124;123458',    '5&#0124;Gustav Johansson&#0124;123458',
  '1&#0124;Bertil Johansson&#0124;123457', '6&#0124;Göran Johansson&#0124;123457',
);

@database =
  map { $_->[0] }
  sort { $a->[2] cmp $b->[2] }
  map { [ $_, ( split /\&#0124;/ ) ] } 
  @database;

print join "\n", @database;

Sorterings formen (map-sort-map) är känd som "Schwartzian Transform".

//Cya

123 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
120 ms — hämta tråd, inlägg och bilagor (db)