
 |

| Community » Perl: Allgemeines Forum |
|
Daten sortieren
|
Seitenanfang |
| Hallo! Ich habe eine Textdatei deren Inhalt folgende Struktur hat: a1,a2 b1,b2 c1,c2 d1,d2 e1,e2 f1,f2 usw. Wie läßt sich diese wie folgt sortieren und in einer neuen Textdatei ausgeben? a1,a2, ,d1,d2, ,g1,g2, b1,b2, ,e1,e2, ,h1,h2, c1,c2, ,f1,f2, ,i1,i2, Und wie ist es möglich, die Zahl der Blöcke (hier 3) frei zu wählen? Gruß Axel
Datum: 16.12.2004-10:19

|
re: Daten sortieren
|
Seitenanfang |
keine Grantie:#! /usr/bin/perluse strict; use warnings; my $anz_bloecke = 3; my $source_file = '/path/to/file.dat'; my $target_file = '/path/to/output.txt'; my %hash; my $counter = 1; open(DATEI,"<$source_file") or die $source_file," ",$!; while(my $line = <DATEI>){ chomp $line; push(@{$hash{$counter}},$line); $counter = 1 if($counter == $anz_bloecke); } close DATEI; open(WRITE,">$target_file") or die $target_file," ",$!; foreach my $key(sort{$a <=> $b}keys(%hash)){ print WRITE join(',',@{$hash{$key}}),"\n"; } close WRITE;
Datum: 16.12.2004-19:31

|
re: Daten sortieren
|
Seitenanfang |
| Hallo Renee! Dein Script habe ich bzgl. der eingabe und des Counters geändert: ----------- use strict; use warnings; my $anz_bloecke = 3; print "Dateiname: "; my $source_file = <STDIN>; # Open DataFileName chomp($source_file); my %hash; my $counter = 0; open(DATA,"<$source_file") or die $source_file," ",$!; while(my $line = <DATA>){ chomp $line; $counter++; push(@{$hash{$counter}},$line); $counter = 0 if ($counter == $anz_bloecke); } close DATA; open(WRITE,">s.$source_file"); # Open a new File foreach my $key(sort{$a <=> $b}keys(%hash)) { print WRITE join(',',@{$hash{$key}}),"\n"; } close WRITE; -------------- Leider werden die Daten nur in der folgenden Form des Counters ausgegeben: 1, 1, 1, 1, 1, ... 2, 2, 2, 2, 2, ... 3, 3, 3, 3, 3, ... Wie kann ich die Sortierung in der Art 1, 2, 3 1, 2, 3 1, 2, 3 usw. bekommen?? Axel
Datum: 30.12.2004-12:10

|
re: Daten sortieren
|
Seitenanfang |
| Wie sieht Deine $source_file-Datei aus?? Ich habe es getestet mit: $source_file: a1,a2 b1,b2 c1,c2 d1,d2 e1,e2 f1,f2 g1,g2 h1,h2 i1,i2 j1,j2 k1,k2 l1,l2 m1,m2 n1,n2 Perl-Skript: #! /usr/bin/perluse strict; use warnings; my $anz_bloecke = 3; my $source_file = './file.dat'; my $target_file = './output.txt'; my %hash; my $counter = 1; open(DATEI,"<$source_file") or die $source_file," ",$!; while(my $line = <DATEI>){ chomp $line; push(@{$hash{$counter}},$line); $counter = 0 if($counter == $anz_bloecke); $counter++; } close DATEI; open(WRITE,">$target_file") or die $target_file," ",$!; foreach my $key(sort{$a <=> $b}keys(%hash)){ print WRITE join(',',@{$hash{$key}}),"\n"; } close WRITE; Ergebnis: a1,a2,d1,d2,g1,g2,j1,j2,m1,m2 b1,b2,e1,e2,h1,h2,k1,k2,n1,n2 c1,c2,f1,f2,i1,i2,l1,l2
Datum: 30.12.2004-17:07

|
re: Daten sortieren
|
Seitenanfang |
#!/usr/bin/perl -w use strict;my $nr=0; my $out; # arrayref mit ergebnissen my $blocks=3; # anzahl der bloecke open (IN, "<text1") or die "open: $!"; while (<IN>) { chop; push @{$out->[$nr % $blocks]}, split(/,/, $_); $nr++; } close (IN); foreach my $l (@$out) { print join(",", @$l), "\n"; }
have fun...
Datum: 30.12.2004-18:43

|
|

|

|