Schrift
[thread]7923[/thread]

zweite Spalte einer Datei in Array einlesen

Leser: 8


<< >> 4 Einträge, 1 Seite
EagleFox
 2006-04-25 14:27
#65318 #65318
User since
2006-04-10
66 Artikel
BenutzerIn
[default_avatar]
Ich möchte aus einer Datei die zweite Spalte einlesen und in ein Array stecken.
In der ersten Spalte der Datei ist die Zeilennummer und in der zweiten Spalte der Wert.
Ich habe mir soweit folgendes gedacht:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
open (DAT,"<$pqc");

my $spek = <DAT>;
close (DAT);

for my $line(split(/\r?\n/,$spek)){
chomp $line;
while(my $wert = (split(/\s+/,$line))[-1]){

push(@speknum,$wert);
}
}


Nur klappt das irgendie nicht.
Sinn der Sache ist, dass ich bei der Bearbeitung einer weiteren Datei, die Datenblöcke enthält, für jeden Datenblock einen Wert aus dem Array brauche. Oder ist das einfacher die passende Zeile, bzw. den Wert, erst aus der Datei zu lesen, wenn der entsprechende Datenblock bearbeitet wird? Die Daten sind sehr Speicherintensiv.
renee
 2006-04-25 14:35
#65319 #65319
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du solltest Fehlerbehandlung machen. Du überprüfst im Moment nicht, ob Du die Datei überhaupt öffnen kannst...

Dann wird im Moment nur eine einzige Zeile aus der Datei eingelesen:
Code: (dl )
my $spek = <DAT>;
Im skalaren Kontext liefert der Diamant-Operator nur die nächste Zeile...

Aufbauend auf Deinem Code sollte folgendes funktionieren:
Code: (dl )
1
2
3
4
5
6
7
my @speknum;

open(my $fh,"<",$pqc) or die $!;
while(my $line = <$fh>){
push(@speknum,(split(/\s+/,$line))[1]);
}
close $fh;


Wenn Du uns ein paar Beispieldaten zeigst, können wir auch besser abschätzen, was für Deine Aufgabenstellung am Geschicktesten ist!
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/
docsnyder
 2006-04-25 14:42
#65320 #65320
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
@EagleFox

Quote
Oder ist das einfacher die passende Zeile, bzw. den Wert, erst aus der Datei zu lesen, wenn der entsprechende Datenblock bearbeitet wird? Die Daten sind sehr Speicherintensiv.


Wenn Du Speicherintensive Daten in der Datei hast, empfehle ich Dir, die Datei initial einmal durchzugehen und Dir mittels tell() die jeweilige Position in einem Array oder Hash (je nachdem, was Du zur Identifikation einer Zeile speichern willst) zu merken. Anschliessend kannst Du zur Zugriffszeit die Position der entsprechenden Zeile aus dem Array/Hash holen und per seek() direkt dorthin springen, ohne jedesmal die vorherigen Zeilen lesen zu müssen.

Gruß, Doc
EagleFox
 2006-04-25 15:06
#65321 #65321
User since
2006-04-10
66 Artikel
BenutzerIn
[default_avatar]
Also die Beispieldateien wären sehr groß. Sie enthalten 19 Zeilen Header und dann nur Zahlen.
Sie sind folgender maßen aufgebaut:
Ein Datenblock besteht aus vier Spalten und 2000 Zeilen. Es gibt in der Datei 16000 Datenblöcke, die durch zwei Leerzeilen getrennt sind.
Die Datei, aus der ich für die Bearbeitung der Datenblöcke die Daten in ein Array lesen wollte besteht aus zwei Spalten und 16000 Zeilen. Die erste Spalte enthält die Zeilennummer ( 0 - 15999 ), also quasi die zugehörige Datenblocknummer. Die zweite Spalte enthält den zu nutzenden Wert.

Ich werde mal den Code oben probieren!

Vielen Dank erst mal!\n\n

<!--EDIT|EagleFox|1145963297-->
<< >> 4 Einträge, 1 Seite



View all threads created 2006-04-25 14:27.