Font
[thread]653[/thread]

hash zurück geben



<< >> 10 entries, 1 page
Grimm
 2006-01-18 14:32
#6708 #6708
User since
2006-01-16
7 articles
BenutzerIn
[default_avatar]
ich möchte ein package machen, das ein file öffnet (vie parameter übergeben) dieses in einen hash speichert und dann das ganze wieder zurück gibt.
wie ist en möglich im perl script diesen hash zu speichern?
einfach dargestellt:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package: (so ähnlich hab ich des zur zeit)
#liest das file und speichert ergenis in hash
sub Opn2 {
my $Objekt = shift;
my $Datei = shift;
%haServers = ();
open(RRD,$Datei) or die "Could not read $rrdFile.\n";
my @lines = <RRD>;
foreach $currentLine(@lines){
if($currentLine =~ /\w/){
@NewServer = split(/;/,$currentLine);
$haServers{$NewServer[0]} = $NewServer[1];
}
print "$haServers{'chr7ca43'}<br>";
return (%haServers);
}


Code: (dl )
1
2
3
perl cgi script:
my $f = new FileReading;
%meinHash = $f->Opn2("myfile.txt")
Taulmarill
 2006-01-18 14:44
#6709 #6709
User since
2004-02-19
1750 articles
BenutzerIn

user image
gibt es denn mit dem code momentan probleme? prinzipell sollte das so funktionieren.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Grimm
 2006-01-18 15:15
#6710 #6710
User since
2006-01-16
7 articles
BenutzerIn
[default_avatar]
hm.. ich habe den ganze morgen daran rum gebastelt, jetzt hab ich es nochmals laufen lassen, und es sieht schon besser aus.
das problem jetzt, er liest nur die erste zeile des files :-(
Taulmarill
 2006-01-18 15:17
#6711 #6711
User since
2004-02-19
1750 articles
BenutzerIn

user image
hm, für mich sieht der code ok aus. du könntest mal mit einer kleinen datei testen und dann den inhalt von @lines ausgeben, am besten mit Data::Dumper:
Code: (dl )
1
2
use Data::Dumper;
print Dumper \@lines;
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Grimm
 2006-01-18 15:30
#6712 #6712
User since
2006-01-16
7 articles
BenutzerIn
[default_avatar]
hab nun das auslesen umgeschrieben.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
open(RRD2,"rrd_srv.txt") or die "Could not read $rrdFile.\n";

while (<RRD2>){
$currentLine = $_;
print "current line: $currentLine<br>";
if($currentLine =~ /\w/){
@NewServer = split(/;/,$currentLine);
$haServers{$NewServer[0]} = $NewServer[1];
}
return (%haServers);
}
close(RRD2);

er liest immer noch nur die erste linie, wenn ich die im file ändere, funktioniert das, aber er geht die anderen nicht durch.
Taulmarill
 2006-01-18 15:55
#6713 #6713
User since
2004-02-19
1750 articles
BenutzerIn

user image
um, nein, so kann das auch nicht gehen, da das return die subroutine beendet, das return unter das close setzen, dann sollte es gehen.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Grimm
 2006-01-18 16:01
#6714 #6714
User since
2006-01-16
7 articles
BenutzerIn
[default_avatar]
aaaaaaaaaaaaaah.. mir fällt ein stein vom herzen :-)
vielen dank für den hinweis...
fing schon langsam an durchzudrehen ;)
Strat
 2006-01-18 17:15
#6715 #6715
User since
2003-08-04
5246 articles
ModeratorIn
[Homepage] [default_avatar]
nebenbei:
Code: (dl )
1
2
    my @lines = <RRD>;
foreach $currentLine(@lines){

kannst du einfacher und ressourcenschonender schreiben:
Code: (dl )
while (my $currentLine = <RRD>) {

Code: (dl )
open(RRD,$Datei) or die "Could not read $rrdFile.\n";

du oeffnest $Datei, gibst aber im fehlerfalle $rrdFile aus... das kann zu verwirrung fuehren. und in $! steht in einem solchen fall eine fehlermeldung
Code: (dl )
open(RRD,$Datei) or die "Could not read $Datei: $!\n";
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Grimm
 2006-01-18 18:00
#6716 #6716
User since
2006-01-16
7 articles
BenutzerIn
[default_avatar]
danke für die hinweise.

die fehlermeldung hatte ich schon angepasst, habs beim rumprobieren sein lassen :-)
zipster
 2006-01-18 19:18
#6717 #6717
User since
2004-09-06
458 articles
BenutzerIn
[default_avatar]
@Grimm
Danke das du das hier gefragt hast.
Dadurch habe ich eben mein Code um einiges verbessert :)
<< >> 10 entries, 1 page



View all threads created 2006-01-18 14:32.