Sortieren eine Arrays..
Holger
- cgi
Hallo,
Stehe aml wieder vor einem Problem.
Ich Habe ein txt. Datei:
test 1test 1test 1
test 2test 2test 2
test 3test 3test 3
test 4test 4test 4
test 5...
.
.
Nun möchte ich mit einem Script diese Sortieren.
Spalte 2 soll sortiert werden, und die andere automatisch mit.
@sortiert = sort {uc($a) cmp uc($b)} @besucher;
Funktioniert. Nur das Problem,
Es wertet Leerzeichen mit aus.
test 1
test 3
test 5
test 2
test 4
Und sollte eigentlich
test 1
test 2
test 3
test 4
test 5
Ausgegeben werden,
Wer kann mir Helfen ?
Danke
Holger
Sup!
@sortiert = sort {uc($a) cmp uc($b)} @besucher;
Du haettest ruhig ein wenig mehr von Deinem Programm posten koennen...
Wie auch immer, entsprechend unvollstaendig wie Deine Angaben hier mein Vorschlag, der natuerlich, haettest Du verraten, wie Dein Array besucher genau aussieht (liste von referenzen oder namen?), exakter haette sein koennen:
@sortiert = sort ohnespace @besucher;
sub ohnespace
{
spacesweg ($a) gt spacesweg($b);
}
sub spacesweg
{
my ($string) = @_;
$string =~ s/ //g;
return $string;
}
Hoffe mal, das passt auch so irgendwie, kauf Dir doch mal "Programming Perl" von Larry Wall...
Calocybe moege mich verbessern, wenn ich Mist geschrieben habe - oder xwolf :-)
Gruesse,
Bio
Hallo nochmals,
Die TXT-Datei
a/a0000010.jpgDas A 9bemerkung1300
b/b0000010.gifDas B 10kritik1300
a/a0000011.ipgBild A 11anregung1300
b/b0000011.jpgTest Bsonstiges1300
Die Datei wird so eingelesen:
open(FILE,"<test.txt");
@besucher = <FILE>;
close(FILE);
.
.
---------------------Hier sollte doch die Sortierung rein ?
.
.
foreach $EINTRAG(@sortiert) {
$EINTRAG =~ s/^ +//;
$EINTRAG=~s/\n//g;
$EINTRAG=~s/\r//g;
$EINTRAG=~s/ä/ä/g;
$EINTRAG=~s/ö/ö/g;
$EINTRAG=~s/ü/ü/g;
$EINTRAG=~s/Ä/Ä/g;
$EINTRAG=~s/Ö/Ö/g;
$EINTRAG=~s/Ü/Ü/g;
$EINTRAG=~s/ß/ß/g;
($file,$name,$bemwerkung,$hits,$down) = split(//,$EINTRAG);
print "----
print "---- Ausgabe ...
print "----
}
exit;
Es soll nur nach der zweiten Spalte Sortiert werden,
allerding sollten alle anderen mitsortiert werden.
Ausgegeben wird es so:
----------------------
Bild A 11 Hyperlink dazu ist dann die erste Spalte
Das B 10B dito . .
Das A 9 . . .
Test B . . .
Ich möchte es aber so azsgegeben haben:
---------------------------------------
Bild A 11
Das A 9
Das B 10B
Test B
Danke
Holger
Hi,
wenn Deine Frage nichts mit CGI zu tun hat (und das hat sie nicht), solltest Du sie nicht für den Themenbereich CGI stellen.
Es soll nur nach der zweiten Spalte Sortiert werden,
allerding sollten alle anderen mitsortiert werden.
perldoc -f sort
perldoc -f split
my @sorted_array = sort { (split(//,$a))[1] cmp (split(//,$b))[1] } @unsorted_array;
Bei größeren Datenmengen lohnt es sich, die Felder vorher umzusortieren (auch mit split), da die Zahl der splits sonst exponentiell steigt.
Cheatah
Das wars, es Funktioniert.
Danke
Holger
Das wars, es Funktioniert.
hi holger
ich würde das wauch vorher zerlegen und dann erst sortieren:
also
open(IN,$filename);
while(<IN>)
{
chomp; # Zeilenumbruch weg
s/^\s*//; # leerzeichen, tabs und so am anfang weg
s/\s*$//; # leerzeichen, tabs und so am ende weg
#hier noch Deine Zeichenumstelllung
s/[äöüÄÖÜß]/$1;/g;
my(@line) = split('',$_);
push @besucher,[@line];
#siehe auch perldsc
}
$sortcol = 1;
foreach $lineref (sort {$a->[$sortcol] cmp $b->[$sortcol]} @besucher)
{
print "$line->[0], $line->[1] .....\n";
#siehe auch perldsc List of List
}
hi,
sorry ist noch rech früh.
um diese Zeit bin ich noch ein Tastaturlegasteniker.
am Ende sollte es heißen
foreach $lineref (sort {$a->[$sortcol] cmp $b->[$sortcol]} @besucher)
{
print "$lineref->[0], $lineref->[1] .....\n";
#siehe auch perldsc List of List
}
Grüße
klaus