hallo,
ich nutze perl auf arbeit zur auswertung meiner daten und habe ein eigentlich so simples, aber doch irgendwie komliziertes problem:
ich habe zwei dateien, die jeweils aus vielen zeilen und spalten bestehen. die spalten sind wiederum verbunden mit einem ";". das ganze sieht etwa so aus (hier abstrahiert fürs bessere verständnis):
id;bedingung;wert1;wert2;wert3;wert4
id;bedingung;wert1;wert2;wert3;wert4
id;bedingung;wert1;wert2;wert3;wert4
id;bedingung;wert1;wert2;wert3;wert4
id;bedingung;wert1;wert2;wert3;wert4
id;bedingung;wert1;wert2;wert3;wert4 usw. usf.
jede der beiden dateien hat die gleiche struktur, nur die daten sind etwas verschieden.
was ich jetzt tun will, ist folgendes:
ich möchte beide dateien jeweils in ein array einlesen, und zwar so, dass die zeilen-spalten-struktur erhalten bleibt (denn ich muß später auf bestimmte spalten (also werte) in jeder zeile zugreifen). im prinzip ist das wie ein array im array - also ich habe ein array, in dem jede zeile einem element entspricht, und dann ist jedes element nochmal ein eigenes array mit den einzelnen werten.
schließlich will ich mir bestimmte werte rausgreifen (ich brauche die id, die bedingung sowie wert 4 jeder zeile), mit den werten eine kleine rechenoperation durchführen und die ergebnisse ins outputfile schreiben. dieser teil ist nicht schwer - mein problem ist das mit dem einlesen...
denn ich schaffe es ohne weiteres, die input-files einzulesen und zu referenzieren, so dass dann jede referenzliste eine zeile des jeweiligen files enthält. so weit so gut.
aber ich schaffe es einfach nicht, jede zeile nochmal als eigenes array aufzusplitten... egal was ich mache, es werden immer alle einzelwerte bzw. -elemente hintereinander weg ausgegeben, so dass jedes element ein einzelwert ist und die zeilen-spalten-struktur nicht mehr da ist...
hat jemand eine idee wie ich dieses problem lösen kann? ich wäre unendlich dankbar!!!
viele grüße,
die lena
User since
2003-08-04
14371
Artikel
ModeratorIn
Da es CSV-Dateien sind, würde ich zu
Text::CSV raten oder - wenn man die Dateien als "Datenbank" behandeln will - zu
DBD::CSV.
Wenn Du sicher sein kannst, dass in den Werten selbst kein Zeilenumbruch und kein ';' vorkommt, dann kannst Du so etwas machen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use strict;
use warnings;
my $file = '/test.csv';
my @array;
open my $fh, '<', $file or die $!;
while( my $line = <$fh> ){
chomp $line;
push @array, [split /;/, $line];
}
close $fh;
print $array[3]->[2];
Die sogenannten "mehrdimensionalen Arrays" werden in Perl mit Referenzen gemacht. Dazu ist
perlreftut lesenswert...
User since
2007-12-13
411
Artikel
BenutzerIn
Crossposting
http://forum.de.selfhtml.org/?t=167416&m=1091830
TMTOWTDYOG (there's more than one way to dig your own grave)