Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]110[/thread]

Sortieren innerhalb einer TXT-Datei



<< >> 3 Einträge, 1 Seite
Gast Gast
 2003-12-14 16:39
#488 #488
Hallo zusammen!

Ich komm bei einem ganz bestimmt Punkt bei meinem Programm nicht weiter. Es soll eine Text-Datei sortiert werden und dann als eine andere Text-Datei ausgespuckt werden.

Um es kurz zu erklären, es handelt sich bei meinem Programm um ein Sport-Spiel. Die Text-Datei hat folgende Struktur:
$Liga;$Team;$Spiele;$Siege;$Unentschieden;$Niederlagen;$Punkte;$Torefuer;$Toregegen;$Tordifferenz

Bis jetzt kann ich immer nur nach Punkten sortieren, das Problem ist, daß bei Punktgleichheit eigentlich nach der Anzahl Siegen sortiert werden sollte und dann nach der Tordifferenz.

Gibt es eine Möglichkeit die 3 Arrays nacheinander sortieren zu lassen? Ich komm ehrlich gesagt, nicht mal im Ansatz darauf.

Würde mich freuen, wenn mir jemand helfen könnte. :-)

Gruß
Frankenhammer
Strat
 2003-12-14 17:56
#489 #489
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
wenn du das alles in einem @array hast, wo eine zeile einem arrayelement entspricht, koenntest du es folgendermaszen machen:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
my @arraySorted = 
 map { # nur die dritte spalte zurueckgeben, da die sortierkritierien
   $_->[3] # nicht mehr gebraucht werden
 }
 sort {
   $a->[0] <=> $b->[0] or # wenn vergleich punkte 0 ist, vergleiche siege
   $a->[1] <=> $b->[1] or # wenn vergleich siege 0 ist, vergleiche tordifferenz
   $a->[2] <=> $b->[2]
 }
 map { # $_ ist eine Zeile, die aufgesplittet wird
   my ($siege, $punkte, $tordifferenz) = (split(/;/, $_))[3,6,9];
   ( [$punkte, $siege, $tordifferenz, $_] ) # und als listenreferenz an sort gegeben wird
 }
 @array


der gewaehlte Weg ist die Schwartzian Transform; eine genauere Erklaerung findest du auf meiner HP unter Tips&Tricks -> Sortierungen\n\n

<!--EDIT|Strat|1071417445-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Crian
 2003-12-14 19:41
#490 #490
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
@strat: Auf Deiner Seite ist noch ein kleiner Tippfehler:

Code: (dl )
4:   map { [ $_->[3], $_ } }      # mache 2dim-Listenreferenz daraus: [ $_[3], [...] ]


ich nehme mal stark an, dass die erste Klammer vom Typ '}' besser ']' sein sollte.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< >> 3 Einträge, 1 Seite



View all threads created 2003-12-14 16:39.