Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]11368[/thread]

2 input files --> 1 output file



<< >> 3 Einträge, 1 Seite
Gast Gast
 2008-02-26 20:20
#106372 #106372
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
renee
 2008-02-26 20:53
#106375 #106375
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Da es CSV-Dateien sind, würde ich zu CPAN:Text::CSV raten oder - wenn man die Dateien als "Datenbank" behandeln will - zu CPAN:DBD::CSV.

Wenn Du sicher sein kannst, dass in den Werten selbst kein Zeilenumbruch und kein ';' vorkommt, dann kannst Du so etwas machen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl

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]; # schiebe die einzelnen Spalten in das Array
}
close $fh;

# gib Spalte 3 aus Zeile 4 aus
print $array[3]->[2];


Die sogenannten "mehrdimensionalen Arrays" werden in Perl mit Referenzen gemacht. Dazu ist perlreftut lesenswert...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
KurtZ
 2008-02-26 21:58
#106381 #106381
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
Crossposting
http://forum.de.selfhtml.org/?t=167416&m=1091830
TMTOWTDYOG (there's more than one way to dig your own grave)
<< >> 3 Einträge, 1 Seite



View all threads created 2008-02-26 20:20.