roman lenz: array sortieren / Schwartzsche Transformation

Beitrag lesen

hi hi

ich möchte einen array (tabelle) nach einer vorgegebenen Spalte sortieren. Ich will dazu die "Schwartzsche Transformation" nutzen. Rolf Post und  Eike Grote haben darüber etwas geschrieben
( http://i-netlab.de/cgi-bin/index.cgi?display=40.13
  <http://perl-seiten.bei.t-online.de/perl/perl_schw.html)

das script unten funct. und zeig die transf.
ich will das ganze um 3 aufgaben erweitern:
  1) $sort gibt vor nach welcher spalte sortiert werden soll
     (Spaltentrenner ist ein leerzeichen)
  2) $sortart gibt vor ob alpha-oder nummerrisch sortiert werden soll
  3) wenn $such definiert ist sollen nur die zeilen sortiert werden
     die $such enthalten ansonsten sollen alle sortiert werden.

zu 1) mit ($m1,$m2,$m3,$m4,$m5)= split(/ /,$_); komme ich an die
      spaltenelemente aber ich bekommen dann z.B. $m4 nicht als
      sortwert eingesetzt
zu 2) u. 3) dieses kann ich ausserhalb der
            "Schwartzsche Transformation" abfangen.
            schön wäre es aber wenn das mit eingebaut wäre

Über tips anregungen und/ oder lösungsansätze bin ich sehr froh

besten dank

bis bis roman

#!perl.exe

use strict;
use CGI qw(:standard);
use CGI::Carp qw(fatalsToBrowser);
my ($m,$m1,$m2,$m3,$m4,$m5);
my @zeilen=("roman lenz 35 67655 kaiserslautern",
            "imke toll 33 55555 japan",
            "uwe buelow 31 40444 leverkusen",
            "mutter benz 62 40764 langenfeld");

#my $such;
my $such="40";
my $sort="4 spalte";
#my $sort="2 spalte";
my $sortart="<=>";
#my $sortart="cmp";
my $cgi = new CGI; # neues Objekt erstellen

print $cgi->header(-type => 'text/html');
foreach(@zeilen) {
print $."<br>";
}
print "<br>";
print "<br>";
@zeilen = map { $
->[0> }
          sort { $a->[1] <=> $b->[1] }
          map { [ $_, (/^.+? (\d+)/)[0] ] } @zeilen;
                                   #^^^ wofür ist das gut ??
foreach(@zeilen) {
if(!$such||/$such/){
print $_."<br>";
}
}

--
P.S. manchmal wundere ich mich schon über die postings (fragen u. antworten) die man hier geboten bekommt(meine eigenen [leider] mit eingenommen)
=> ich denke mir meinen teil und ziehe das beste daraus :-)