Schrift
[thread]11788[/thread]

Hashtabelle dynamisch erzeugen

Leser: 3


<< |< 1 2 >| >> 14 Einträge, 2 Seiten
benjo
 2008-05-11 11:08
#109558 #109558
User since
2007-05-12
13 Artikel
BenutzerIn
[default_avatar]
Hallo Leute,

ich versuche gerade folgendes in Perl zu realisieren,

Ich habe Text Dateien .txt mit irgend welchen Namen in einem bekannten Verzeichniss.
Code: (dl )
1
2
3
namen.txt
adresse.txt
telefonnr.txt


diese sollen gelesen werden und eine Hash Tabelle erzeugt werden, mit dem Namen der
Text Datei quasi so --> %namen, %adresse, %telefonnr, und diese Datein hat bspw. folgenden Inhalt

Code: (dl )
1
2
3
Peter, 22
Max, 21
Mark, 23


Dann soll der name der key und die Zahl der Wert sein. Das auslesen und matchen der
Werte ist eigentlich nicht das Problem. Ich hänge mehr daran die Tabelle anhand der Dateien dynamisch zu erzeugen. Ich hoffe ich konnte mein Problem einigermassen klar
darstellen.

gruss benomatic
Struppi
 2008-05-11 11:21
#109560 #109560
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Das geht so:
Code (perl): (dl )
$hash{$name} = $key;
benjo
 2008-05-11 13:16
#109563 #109563
User since
2007-05-12
13 Artikel
BenutzerIn
[default_avatar]
Hm ich glaube ich hab mich nicht klar ausgedrückt,..
Also mein Skript soll in ein Verzeichniss schauen und anhand der vorhandenen Textfiles die hash Tabellen initialisieren. Das befüllen der Tabellen ist nicht mein Hauptproblem sondern das "Schau ins Verzeichniss und erstelle mir die Tabellen anhand der Textfiles" und zwar immer genau soviele Tabellen wieviele Textfiles vorhanden sind.

Hoffe ich habe mich jetzt besser ausdrücken können. Das befüllen der Tabellen mit denn Werten ist dann ja nicht schwer :)
Struppi
 2008-05-11 13:42
#109565 #109565
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Deine Frage ist etwas sehr allgemein gefaßt, wo hast du ein konkretes Problem?

Du hast dir Doku angeschaut und keine Funktion zum lesen eines Verzeichnis gefunden?
http://perldoc.perl.org/functions/opendir.html
http://perldoc.perl.org/functions/readdir.html
http://perldoc.perl.org/functions/closedir.html

Oder wie du Dateien öffnen und lesen kannst?
http://perldoc.perl.org/functions/open.html
topeg
 2008-05-11 14:00
#109566 #109566
User since
2006-07-10
2611 Artikel
BenutzerIn

user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

# in welchem Verzeichnis willst du suchen
my $workdir='/hier/pfad/zum/verezeichnis';

# da rein kommen alle Datensätze
my %datensaetze;

# Verzeichnis öffnen
opendir(my $dir, $workdir) or die "Konnte Verzeichnis $workdir nicht oeffnen ($!)\n";
# Dateinamen einzeln auslesen
while(my $dat=readdir($dir))
{
# ist es wirklich eine Datei?
if(-f "$workdir/$dat")
{
# Datei öffnen
open(my $in, '<', "$workdir/$dat") or die "konnte Datei $workdir/$dat nicht oeffnen ($!)\n";
# Namen für den Hash generieren
$dat=~s/^(.+?)\..+$/$1/s;
# wenn noch kein hasheintrag mir dem Namen existiert einen erzeugen
$datensaetze{$dat}={} unless (exists($datensaetze{$dat}));
# Datei Zeilenweise auslesen
while(my $line=<$in>)
{
# Zeilrnumbruch entfernen
chomp($line);
# Zeile aufsplitten
my ($name,$wert)=split(/\s*,\s*/,$line,2);
# Daten in den Hash schreiben
$datensaetze{$dat}{$name}=$wert;
}
# Datei schließen
close ($in);
}
}
# Verzeichnis schließen
closedir($dir);

# alles gefundenen ausgeben
print Dumper(\%datensaetze)."\n";
benjo
 2008-05-11 14:45
#109568 #109568
User since
2007-05-12
13 Artikel
BenutzerIn
[default_avatar]
super Danke,

genau das hier war mein Problem

Code (perl): (dl )
1
2
3
4
# Namen für den Hash generieren
  $dat=~s/^(.+?)\..+$/$1/s;
  # wenn noch kein hasheintrag mir dem Namen existiert einen erzeugen
  $datensaetze{$dat}={} unless (exists($datensaetze{$dat}));


nochmals vielen Danke.
Struppi
 2008-05-11 15:06
#109570 #109570
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Ganz toll, warum hast du uns nicht das Problem und die Fehlermeldung gesagt?
Stattdessen muss dir jemand ein Skript schreiben, ich hab mich auf die suche nach den Links gemacht und das alles nur weil du die Fehlermeldung nicht preisgeben willst?
sehr nett.
Gast Gast
 2008-05-11 15:10
#109571 #109571
Code (perl): (dl )
$datensaetze{$dat}={} unless (exists($datensaetze{$dat}));

das ist unnötig. das macht perl von sich aus. topeg wurde schon mal darauf hingewiesen.
benjo
 2008-05-11 16:00
#109573 #109573
User since
2007-05-12
13 Artikel
BenutzerIn
[default_avatar]
@Struppi
Entschuldige wenn ich mein Fehler nicht richtig rübergebracht habe, aber ich hatte auch keine Fehlerausgabe, mehr die umsetzung bzw das "Wie" hat gefehlt bzw. ich hatte einfach ein Brett vor dem Kopf. Trotzdem haben mir deine Links sehr geholfen da ich ja noch nicht fertig bin.

Danke nochmal.
benjo
 2008-05-11 16:27
#109576 #109576
User since
2007-05-12
13 Artikel
BenutzerIn
[default_avatar]
noch eine Frage an topeg,

zu deinem Skript wie kann ich jetzt auf die einzelnen Werte und Keys zugreifen ?
<< |< 1 2 >| >> 14 Einträge, 2 Seiten



View all threads created 2008-05-11 11:08.