cgicorner.ch

Informationen rund um Perl/CGI

Sie sind hier: Home > Knowledge Base > Sortieren nach Feld X

Sortieren nach Feld X

Wie kann ich einen Array mit mehreren, Trennzeichen getrennten, Datensätzen nach einem beliebigen Feld sortieren?

Beispiel:

@test[0]="Herr;Hans;Muster;Mustergasse 99;9999;Mustershausen;099 999 99 99";
@test[1]="Herr;Fritz;Meier;Teststrasse 78;6786;Testingen;077 777 77 77";

Soll nach Namen (drittes Feld) sortiert werden.

Es muss eine Subroutine geschrieben werden, welcher der komplette String übergeben werden kann und die dann den für die Sortierung relevanten Teil zurückliefert.

In unserem Beispiel sähe die Subroutine etwa so aus:

sub nameSort {
  my (@inputData);
  @inputData=split(/;/, @_[0]);
  return @inputData[2];
}

Das Array kann nun mit folgendem Befehl alphanumerisch sortiert werden:

@test1=sort {&nameSort($a) cmp &nameSort($b)} (@test);

Folgender Code sortiert das Array numerisch:

@test1=sort {&nameSort($a) <=> &nameSort($b)} (@test);

Das Ergebnis wird jeweils in das Array @test1 geschrieben.

Hier noch eine allgemein gültige Subroutine, bei der Trennzeichen und Spalte übergeben werden können.

#@test1=sort {&spaltenSort($a, "Trennzeichen", Spalte) cmp &spaltenSort($b, ";", Spalte)} (@test);
#Spalte beginnt jeweils bei 0
sub spaltenSort {
  my (@inputData);
  @inputData=split(/@_[1]/,@_[0]);
  return @inputData[@_[2]];
}

Autor: Jürg Sommer, knowledge@cgicorner.ch

[ zurück ]