Textdatei auslesen und in hash schreiben

z00k

z00k

I love my slack! Do u?
Howdy!

Da es schon einige Zeit her ist, als ich mit Perl gescripted habe, stehe ich leider vor einem kleinen Problem.

Ich habe eine Textfile in folgendem Format:

Code:
/my/path/file1.ext Revision: 2.0.1
/my/path/file2.ext Revision: 2.0.7
...

Diese wuerde ich nun gerne mit Perl auslesen und in ein Hash packen um die Daten danach weiter zu verarbeiten. Also so:

Key: "/my/path/file1.ext" Value: "2.0.1" etc.

Das Ganze wuerde ich mit RegEx angehen, so meine erste Idee.

Koennte mir evtl jemand von den Perl Hackern hier ein kleines Beispiel geben fuer meinen Fall? :D


Danke im Vorraus!

gReetZ
 
Wie wäre es so?
Code:
#!/usr/bin/perl
use warnings;
use strict;

my $fh;
my %hash;
open($fh, "data.txt");
while(<$fh>) {
	 split(/\s/);
	 $hash{$_[0]} = $_[2];
}
 
Perfekt! Weiter komme ich dann alleine klar!

Vielen Dank! :D


gReetZ
 
Warum denn bitte mit \s aufsplitten? 0,0
Code:
$ cat sample 
/my/path/file1.ext Revision: 2.0.1
/my/path/file2.ext Revision: 2.0.7
$ perl -anF'\s+Revision:\s+' -e 'chomp @F; $rev{$F[0]} = $F[1]; END {print "$_\t$rev{$_}\n" for keys %rev}' sample
/my/path/file2.ext      2.0.7
/my/path/file1.ext      2.0.1
Macht ungefähr das Gleiche wie das Skript von mµ, nur dass es mit der Regex '\s+Revision\s+' splittet. "Ausgeschrieben" sieht das dann ungefähr so aus:
Code:
use strict; use warnings;

my (%rev, @F);

while ($_ = <ARGV>) {
    @F = split m{\s+Revision:\s+}, $_;
    chomp @F;
    $rev{$F[0]} = $F[1];
}

for (keys %rev) {print "$_\t$rev{$_}\n"}
 
Stimmt, das ist irgendwie sehr viel sinnvoller, zumal man damit auch Probleme mit Leerzeichen im Dateinamen vermeidet.
Naja, man kommt nicht immer sofort auf das nahestliegendste.
 

Ähnliche Themen

Jaunty + Zend + Gdata + xampp

Squid nur zum maskieren der eigenen IP, nicht für Webserver auf port 80

Zurück
Oben