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 :-)