Thread Auslesen aus .txt bis Trennzeichen, wie?: Auslesen aus .txt bis Trennzeichen, wie? (51 answers)
Opened by Gast at 2005-10-26 14:09

Dubu
 2005-11-10 18:24
#59394 #59394
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Hier ein soweit funktionierender Code (mit deinen Daten getestet) mit den genannten Verbesserungen.
Ich habe dabei - wie ich es meist mache - die globalen Variablen mit Grossbuchstaben am Wortanfang benannt, damit sie leichter von den lokalen zu unterscheiden sind, ein paar Warnungen ergaenzt und umgeschrieben und weniger hartkodierte Werte benutzt (Dateiname, Serveranzahl).
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/usr/bin/perl

use strict;
use warnings;
use Text::CSV_XS;

my $File = 'apo_neu-1.csv';
my $ServerCnt = 6;
my @Entries;

my $Parser = Text::CSV_XS->new({
   sep_char    => ';',
   binary      => 1,
});

open (my $InFile,'<', $File) or die "Konnte $File nicht oeffnen: $!";

while (my $line = <$InFile>) {
   if($Parser->parse($line)) {
       my @fields = $Parser->fields();

       # Nur Zahlen von 01 bis 49 im letzten Feld erlaubt
       if ($fields[-1] =~ m/^\d{2}$/ and $fields[-1] > 0 and $fields[-1] <= 49) {
           push @Entries, [ @fields ];
       }
   } else {
       warn "Fehler beim Parsen in Zeile $. (Inhalt: " . $Parser->error_input() . ")";
   }
}

# Sortieren nach dem letzten Arrayfeld
my @Sorted = sort {$a->[-1] <=> $b->[-1]} @Entries;

#-----------------------------------------------------------------------------------------
# Aufteilen der Daten auf $ServerCnt Server
#-----------------------------------------------------------------------------------------

my @Servers;
for my $s (0 .. $ServerCnt-1) {
   open ($Servers[$s], '>', "apo_server" . ($s+1) . ".txt")
       or die "Konnte Datei apo_server" . ($s+1) . ".txt nicht zum Schreiben oeffnen: $!";
}
my $ActServer = 0;
for my $i (0 .. $#Sorted) {
   # Zeile fuer Server Nr. $act_server+1 ausgeben
   print { $Servers[$ActServer] } join(" ", @{$Sorted[$i]}), "\n";

   # Naechster Server
   $ActServer = (($ActServer+1) % $ServerCnt);
}
close $_ for @Servers;

#-----------------------------------------------------------------------------------------

View full thread Auslesen aus .txt bis Trennzeichen, wie?: Auslesen aus .txt bis Trennzeichen, wie?