Sortierung
eichbaum
- perl
0 Felix Schwarz0 eichbaum0 Klaus Mock0 eichbaum
0 AlexBausW
Hallo Ihr,
Danke an Peter, Klaus, Felix, Cheatah - es funktioniert.
(siehe http://www.teamone.de/selfaktuell/forum/messages/117889.html)
foreach my $key (keys %cgivorgaben)
{
if($key =~ /^Level(\d+)UKap(\d+)Feld(\d+)$/)
{
my($Level,$UKap,$Feld) = ($1,$2,$3);
undsoweiter...
Jetzt stellt sich mir noch folgende Frage:
Ich habe immer noch die generierten Feldnamen
"Level2Feld$var1UKap$var2",
kann die zugehörigen Werte wunderbar ausgeben und kann sie auch sortieren - allerdings noch nicht ganz so, wie ich möchte.
$var1 kann von 0 bis wasweißich laufen, $var2 ebenso. Jetzt sollen für jede $var1 und dazugehörige, durchlaufende $var2 die Werte ausgegeben werden. Im Endeffekt soll das dann so aussehen:
Level2Feld1UKap0
Level2Feld1UKap1
Level2Feld1UKap2
Level2Feld2UKap0
Level2Feld2UKap1
Level2Feld2UKap2
...
Ich habe es mit "sort" probiert, weiß aber ehrlich gesagt nicht genau, wie ich ihn einsetzen könnte.
Habt Ihr einen Tip für mich?
Danke,
eichbaum
Hallo,
kann die zugehörigen Werte wunderbar ausgeben und kann sie auch sortieren - allerdings noch nicht ganz so, wie ich möchte.
Ich habe es mit "sort" probiert, weiß aber ehrlich gesagt nicht genau, wie ich ihn einsetzen könnte.
was funktioniert denn nicht?
allgemein müsste @sortierte_liste = sort (@unsortierte_liste); wohl den Zweck erfüllen, allerdings solltest Du zwecks richtiger Sortierung darauf achten, dass die Zahlen alle die gleiche Anzahl an Ziffern haben.
(wenn der Wertebereich von $Level also von 0-20 ist, sollten alle Zahlen auch zweistellig sein, da sort nur nach ASCII sortiert. Um Ziffern zweistellig zu kriegen, ist sprintf hilfreich.)
ansonsten:
perldoc -f sort
perldoc -f sprintf
hoffe, das hilft
fs
allgemein müsste @sortierte_liste = sort (@unsortierte_liste); wohl den Zweck erfüllen, allerdings solltest Du zwecks richtiger Sortierung darauf achten, dass die Zahlen alle die gleiche Anzahl an Ziffern haben.
(wenn der Wertebereich von $Level also von 0-20 ist, sollten alle Zahlen auch zweistellig sein, da sort nur nach ASCII sortiert. Um Ziffern zweistellig zu kriegen, ist sprintf hilfreich.)
Das wird‚s wohl gewesen sein - die Sortierung hatte folgende Reihenfolge ergeben:
(zur Erinnerung: Level2Feld$var1UKap$var2)
... $var1 $var2
2 0
2 1
2 2
1 0
1 1
0 0
0 1
--> innerhalb der Unterkapitel schon in sich konsistent, allerdings waren die Unterkapitel selbst in der falschen Reihenfolge.
Das Hauptproblem ist dabei, daß ich die Textfelder wieder in einen XML-Stream schreiben muß: und zwar so, daß zwischen Eltern und Kindern unterschieden wird.
Deswegen bringt mir auch die reine Sortierung nach der Reihe nichts - ich muß wissen, wie lange $var1 mit "1" belegt ist, damit ich in einer Unterschleife die Werte mit der Variablen-Reihenfolge "1 0" - "1 1" - "1 2" usw. in die Felder schreiben kann.
Und daran knabbere ich gerade...
eichbaum
Hallo,
Deswegen bringt mir auch die reine Sortierung nach der Reihe nichts - ich muß wissen, wie lange $var1 mit "1" belegt ist, damit ich in einer Unterschleife die Werte mit der Variablen-Reihenfolge "1 0" - "1 1" - "1 2" usw. in die Felder schreiben kann.
»»
Und daran knabbere ich gerade...
Na dann kombinier mal die Regex von gestern mit einer Sortierung und pack das ganze in ein Zwischenarray
<sample>
foreach my $key(keys %forumularwerte)
{
if($key =~ /^Level2Feld(\d+)UKap(\d+)$/)
{
$werte[$1][$2] = $formularwerte{$key};
}
}
#2 sortiert ausgeben
foreach my $feld (@werte)
{
&ausgabe_feld($feld);
}
sub ausgabe_feld
{
my($feldinhaltref) = shift;
print OUTHNDL "<irgendein_xml_zeuchs>";
foreach my $kap (@$feldinhaltref)
{
&ausgabefeldinhalt($kap);
}
print OUTHNDL "</irgendein_xml_zeuchs>";
}
</sample>
Natürlich fehlt da noch ein haufen, beispielsweise ist das Ding mit dem OUTHNDL nicht sauber, da könntest Du auch was mit einer Referenz auf das Handle machen, aber ich denke der Sinn kommt soweit rüber.
Grüße
Klaus
PS.: Jetzt solltest Du aber für Deine Arbeit doch mal beispielsweise das Perl-Kochbuch besorgen, das nicht wir plötzlich mit Dir zusammmen das Diplom erhalten müssen ;-)
PS.: Jetzt solltest Du aber für Deine Arbeit doch mal beispielsweise das Perl-Kochbuch besorgen, das nicht wir plötzlich mit Dir zusammmen das Diplom erhalten müssen ;-)
Hallo Klaus,
Danke für die ausführliche Antwort! Ich werde mich gleich dran setzen.
Wir schreiben seit 4 Monaten zu zweit an dieser Studienarbeit - und das vorgenannte Problem ist nun wirklich nur ein sehr kleiner Teil des Themas. Aber zugegebenermaßen ein Teil, bei dem ich auf ein wenig Hilfe angewiesen war... :-)
Du brauchst Dir also keine Sorgen zu machen, daß Du mir hier die halbe Arbeit geliefert hast... ;-)
Und wenn man mal so richtig auf dem Schlauch sitzt, hilft das beste Perl-Buch nix.
Danke,
eichbaum
Hallo Felix,
allgemein müsste @sortierte_liste = sort (@unsortierte_liste); wohl den Zweck erfüllen, allerdings solltest Du zwecks richtiger Sortierung darauf achten, dass die Zahlen alle die gleiche Anzahl an Ziffern haben.
(wenn der Wertebereich von $Level also von 0-20 ist, sollten alle Zahlen auch zweistellig sein, da sort nur nach ASCII sortiert. Um Ziffern zweistellig zu kriegen, ist sprintf hilfreich.)
Woher hast Du diese Weisheit? ;-) Probier es doch einfach mal mit: @zahlensortiert = sort { $a <=> $b } @zahlenunsortiert;
Durch die Möglichkeit, der Funktion sort() eine eigene Vergleichsfunktion mit auf den Weg zu geben, kannst Du mit sort() alles mögliche sortieren. :-)
Gruß AlexBausW
Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html