Schrift
[thread]11671[/thread]

Splitten einer Textdatei

Leser: 2


<< >> 5 Einträge, 1 Seite
heinzelman
 2008-04-21 01:11
#108608 #108608
User since
2008-04-21
1 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

ich versuche mit einem Script folgende Textdatei auszulesen:
Code: (dl )
1
2
Name1|10.10.10.10|
Name2|20.20.20.20|


Die Werte möchte ich splitten und in separaten Variablen speichern:

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

my $config_file="cfg.txt";

open(config, $cfg_file);
flock(config, 2);
LINE: while(<config>) {
chomp;
next LINE if(/^$/); #Skip blank lines
my ($HOSTNAME,$IP) = split(/|/);
my $temp = {HOSTNAME => $HOSTNAME,IP => $IP};
next LINE;
}
print $temp;


Allerdings stecke ich hier fest und komme nicht weiter... Das script gibt mir bei "print $temp;" nichts zurück... Kann mir hier jemand weiterhelfen?

Vielen Dank!
KurtZ
 2008-04-21 01:18
#108609 #108609
User since
2007-12-13
411 Artikel
BenutzerIn
[default_avatar]
$temp ist eine Hashreferenz, was willst du da printen?
TMTOWTDYOG (there's more than one way to dig your own grave)
RalphFFM
 2008-04-21 01:31
#108610 #108610
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Vielleicht sucht heinzelman ein Array von Hashes?
Was soll das Skript tun? Nur um zu printen braucht er ja gar nicht erst speichern.
renee
 2008-04-21 11:04
#108614 #108614
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Vor allem ist $temp eine lexikalische Variable, die nur innerhalb der while-Schleife gültig ist.

Ein Wiki:use strict hätte darauf aufmerksam gemacht!
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/
nepos
 2008-04-21 11:31
#108619 #108619
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Das Label LINE kannst du dir auch sparen, inklusive dem next am Ende der while-Schleife.
Ausserdem, dein Code ueberschreibt $temp mit jeder passenden Zeile.
Zusätzlich musst du | beim Splitten escapen, da es in einer RegEx eine spezielle Bedeutung hat.
Was zu wohl eher willst wäre dann das:
Code (perl): (dl )
1
2
3
4
5
6
7
my @temp;
while(<config>) {
    chomp;
    next if(/^$/); #Skip blank lines
    my ($HOSTNAME,$IP) = split(/\|/);
    push(@temp, {HOSTNAME => $HOSTNAME,IP => $IP});
}


Damit hast du dann einen Array, der Hashreferenzen mit deinen Daten hat.
<< >> 5 Einträge, 1 Seite



View all threads created 2008-04-21 01:11.