PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Perl] datei mit einer bestimmten Formatierung lesen



ulzf
18-03-2008, 11:19
hallo Zusammen,
ich möchte gern wissen ob es irgendein Modul gibt, das man benutzen kann um Datei mit bestimten formatierungen (z.B. CSV) direkt in ein HASH Laden kann.
Oder gibt es was ähnliches zum Lesen wie Das format von Perl beim schreiben

Danke und Gruß

reneeb
19-03-2008, 17:35
Es kommt immer darauf an, welches Format es ist. Für CSV-Dateien gibt es Text::CSV bzw. Text::xSV. Für XML gibt es XML::Simple, für YAML gibt es YAML::Tiny.

Mit etwas konkreterer Fragestellung kann auch konkreter geholfen werden.

jan61
20-03-2008, 20:06
Moin,

CSV-Dateien kennen doch normalerweise keine Feldnamen - es sei denn, sie haben eine Headerzeile. Im ersten Fall bringt ein Hash nix, im 2. kann man das auch (unter bestimmten Voraussetzungen, z. B. keine Trennzeichen innerhalb der Felder) schnell von Hand erledigen (ungetestetes Fragment):

my @hdr = undef;
foreach (<INPUT>) {
chomp;
unless (@hdr) { @hdr = split /;/; next; }
my @f = split /;/;
my %fields = ();
for (my $n = 0; $n <= $#f; ++$n) { $fields{$hdr[$n]} = $f[$n]; }
}
Jan

reneeb
21-03-2008, 09:29
@jan61: Was machst Du, wenn ein ; in den Daten vorkommt? Folgendes ist valides CSV:

1;"Dies ist ein Test; aber hallo";3;54

Deswegen einen richtigen Parser verwenden, der solche Fälle kennt...

jan61
03-04-2008, 19:09
Moin,


@jan61: Was machst Du, wenn ein ; in den Daten vorkommt?

Deshalb meine Einschränkung "unter bestimmten Voraussetzungen, z. B. keine Trennzeichen innerhalb der Felder". Ich wollte nur zeigen, dass man (eben in bestimmten Situationen) durchaus auch mit einer kleinen selbstgestrickten Lösung ans Ziel kommt. Das ist nach meiner Erfahrung oft deutlich performanter als der Einsatz von Standard-Modulen, weil der Overhead geringer ist. Gerade bei der Verarbeitung großer Datenmengen kann das viel Zeit sparen.

Jan