perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 27
Click for quality!




11.02.2012 / 13:25

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  Perl: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDaten 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

Beitragre: Daten sortieren
Seitenanfang
keine Grantie:
#! /usr/bin/perl

use 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

Beitragre: 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

Beitragre: 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/perl

use 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

Beitragre: 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

-






-
-