array sortieren / Schwartzsche Transformation
roman lenz
- perl
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>";
}
}
hi Roman,
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.htmldas 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.
1. zum sortieren nimm am besten den <=> als Vergl. Operator.
2. die sortierhilfe baust du so dass ein parameter übergeben wird welcher sagt nach welchem wert sort. werden soll
@a = sort{ sorthilfe($a,$x) <=> sortierhilfe($a,$x)}@unsorted_a;
ein Beispiel als CGI findest du hier
http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.10.20
Rolf
hi Rolf
dank die für deine Antwort.
ich will es erstmal mit der "Schwartzsche Transformation" versuchen zum einen interessiert mich das und zum anderen ist sie ja auch schneller :-)
@zeilen = map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [ $_, (/^.+? (\d+)/)[0] ] } @zeilen;
^^^
weist du wofür das hier gut ist
mein Beis. läuft mit und ohne *kratz*
bis bis roman
hi Roman,
@zeilen = map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [ $_, (/^.+? (\d+)/)[0] ] } @zeilen;
^^^
weist du wofür das hier gut ist
mein Beis. läuft mit und ohne *kratz*
das sind die elemente des anomymen Arrays im Schritt 1 (siehe meine Dok i. Link)
[0] [1]
[hier steht der record][hier steht der Value nach dem sortiert wird]
--> die RegEx ermittelt den Value aus dem Record, also aus [0]
Anstelle einer RegEx kannst du auch eine eigenen Funktion verwenden like this:
my @ergebnis = map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [ $_, ( hier($_,$depth) )[0] ] } @numbers;
In der Hoffnung dass damit alle Klaheiten beseitigt sind ;-)
Rosti
hi Rolf
das sind die elemente des anomymen Arrays im Schritt 1 (siehe meine Dok i. Link)
[0] [1]
[hier steht der record][hier steht der Value nach dem sortiert wird]
jeep das war mir klar :-)
--> die RegEx ermittelt den Value aus dem Record, also aus [0]
jeep da aber [0] und $_ identisch sind kann man doch den zusatz [0] weg lassen.? wie gesagt bei mir klappt das mit und ohne.
warum kommt der zusatz [0] dahinter? ich hätte gesagt das es wie in der m-funct. aussehen sollte ($_=~/...../).
Anstelle einer RegEx kannst du auch eine eigenen Funktion verwenden like this:
jeep kenn ich :-)
ich leser überall das man die map funct. auch mit blockelementen benutzen kann. habe aber noch nie ein Beisp. gesehen und das auch noch nicht ganz gerafft. hast du ein besp. für ein block in der map function?
In der Hoffnung dass damit alle Klaheiten beseitigt sind ;-)
die klarheiten beseitige ich jetzt ploppp ziiisch und wech ;-)
besten dank für deine antwort
bis bis roman
hi Roman,
das sind die elemente des anomymen Arrays im Schritt 1 (siehe meine Dok i. Link)
[0] [1]
[hier steht der record][hier steht der Value nach dem sortiert wird]
jeep das war mir klar :-)
--> die RegEx ermittelt den Value aus dem Record, also aus [0]
jeep da aber [0] und $_ identisch sind kann man doch den zusatz [0] weg lassen.? wie gesagt bei mir klappt das mit und ohne.
Ouh, Du hast recht, das stimmt!
Weglass-das ;-)
In der Hoffnung dass damit alle Klaheiten beseitigt sind ;-)
die klarheiten beseitige ich jetzt ploppp ziiisch und wech ;-)
Komm bald wieder ;-)
Viele Grüße, Rolf
hi Rolf
Ouh, Du hast recht, das stimmt!
Weglass-das ;-)
ich hab was richtig gemacht *freu* zur belohnung ploppp ziiisch und wech
bis bis roman
hi again, Roman
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
da meine Antwort-Mail an dich nicht zustellbar war:
Vielen Dank für Dein Feedback von Gestern!
Viele Grüße, Rolf