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

SORT????

Leser: 5


<< >> 6 Einträge, 1 Seite
Gast Gast
 2004-05-14 15:46
#82385 #82385
Hallo an alle,


ich will den untenstehenden Inhalt einer Datei erst nach der ersten und dann nach der 6. Spalte sortieren, kann mir jemand auf die Schnelle sagen wie das funzt.
(Die Spalten sind mit einer undefinierten Zahl an Leerstellen getrennt)

IC71-1 SO14 MENI 901 8 5 GA
D65-1 SOD15 MENI 1 2 2 GA
IC14-1 SO16 LAND 15 2 5 GA
D17-1 MELF MENI 903 6 810 GA
IC14-1 SO16 LAND 2 2 5 GA
IC14-1 SO16 LAND 9 2 5 GA
IC69-1 SO-16L MENI 601 2 2 GA
R94-1 R0805 MENI 900 8 2 GA
IC14-1 SO16 LAND 12 2 5 GA
IC14-1 SO16 LAND 10 2 690 GA
D17-1 MELF MENI 900 20 5 GA
D14-1 SOD15 MENI 1 2 2 GA
R426-1 MINIMELF MENI 900 8 110 GA
D178-1 SOD15 MENI 1 2 2 GA
D138-1 SOD-80C LAND 1 2 380 GA
D142-1 SOD15 MENI 900 4a 2 GA
IC71-1 SO14 MENP 508 20 630 GA
IC14-1 SO16 MENP 506 20 5 GA
IC14-1 SO16 MENP 507 20 5 GA
IC14-1 SO16 MENP 508 20 5 GA
IC14-1 SO16 MENP 502 20 5 GA
IC11-1 SO16 MENP 501 10 390 GA


Wäre für jede Hilfe dankebar

Andreas
format_c
 2004-05-14 15:56
#82386 #82386
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
So in Etwa:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
my @in;
while (chomp(my $in = <DATA>)) {
push @in,[split /\s+/,$in];
}
for (sort {$a->[0] cmp $b->[0] or $a->[5] <=> $b->[5]} @in) {
print join(",\t",@$_),"\n";
}
_ _DATA_ _
IC71-1 SO14 MENI 901 8 5 GA
D65-1 SOD15 MENI 1 2 2 GA
IC14-1 SO16 LAND 15 2 5 GA
D17-1 MELF MENI 903 6 810 GA
IC14-1 SO16 LAND 2 2 5 GA
IC14-1 SO16 LAND 9 2 5 GA
IC69-1 SO-16L MENI 601 2 2 GA
R94-1 R0805 MENI 900 8 2 GA
IC14-1 SO16 LAND 12 2 5 GA
IC14-1 SO16 LAND 10 2 690 GA
D17-1 MELF MENI 900 20 5 GA
D14-1 SOD15 MENI 1 2 2 GA
R426-1 MINIMELF MENI 900 8 110 GA
D178-1 SOD15 MENI 1 2 2 GA
D138-1 SOD-80C LAND 1 2 380 GA
D142-1 SOD15 MENI 900 4a 2 GA
IC71-1 SO14 MENP 508 20 630 GA
IC14-1 SO16 MENP 506 20 5 GA
IC14-1 SO16 MENP 507 20 5 GA
IC14-1 SO16 MENP 508 20 5 GA
IC14-1 SO16 MENP 502 20 5 GA
IC11-1 SO16 MENP 501 10 390 GA

Gute Tutorials gibts auch auf der Privatseite von Crian :http://links.perl-community.de/#Private_Perl_Seiten

Gruß Alex
renee
 2004-05-14 15:58
#82387 #82387
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
use Data::Dumper;
my @array = ();
foreach(@zeilen){
my @line = split(/\s+/,$_);
push(@array,\@line);
}

@sorted = sort{$a->[0] cmp $b->[0] or $a->[5] <=> $b->[5]} @array;

print Dumper(\@sorted);

untested
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2004-05-14 20:11
#82388 #82388
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Klar, schau Dir die Sort-Beispiele unter Snippets auf meiner Homepage an (Link ist in der Signatur). Da ist für einen entsprechenden Fall ein Snippet vorhanden.
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
steve
 2004-05-15 18:59
#82389 #82389
User since
2004-03-04
52 Artikel
BenutzerIn
[default_avatar]
Code: (dl )
1
2
3
my @sort = map { $_->[0] }
sort { $a->[1] cmp $b->[1] || $a->[6] <=> $b->[6] }
map { [$_, split / /,$_ ] } @array;


ich würds so machen.

steve

edit: dankean betterworld! cmp gegen <=> ersetzt\n\n

<!--EDIT|steve|1084644342-->
betterworld
 2004-05-15 21:21
#82390 #82390
User since
2003-08-21
2613 Artikel
ModeratorIn

user image
Achtung steve, cmp vergleicht alphabetisch, <=> numerisch!
<< >> 6 Einträge, 1 Seite



View all threads created 2004-05-14 15:46.