Thread Perl Hilfe (26 answers)
Opened by Julie at 2009-07-07 09:20

Gast Julie
 2009-07-07 09:36
#122899 #122899
Also die Aufgabe ist diese:

2. Schreiben Sie ein Adressverwaltungs-Programm, das Einträge dynamisch aus der
beiliegenden Datei „adressbuch.txt“ einliest und über eine kleine Menü-Steuerung verfügt.
Das heißt: Wenn der Benutzer das Programm startet, soll eine Auswahlmenü angezeigt
werden, das aus 2 Möglichkeiten besteht: 1. Einen Namen suchen, 2. Beenden
Das Programm soll beim Start immer automatisch die Adressen aus der Datei lesen und
ein Hash anlegen, mit dem Nachnamen als Schlüssel und dem Rest der Adresse als
String-Wert. (Tipp: Trennen Sie die Zeilen mittels split am tab, also \t )
Folgende Funktionalität soll innerhalb des Quellcodes als eigene Subroutine
implementiert werden:
1. Das Laden der Adressen aus der Datei
Diese Funktion soll das Laden aus der Datei vom Rest des Programmcodes
kapseln. Betten Sie dazu „open()“ in eine Verzweigung ein. (Statt „open() || die
...“, kann man „if (open(...)){}“ benutzen, ohne „|| die“.) Die Bedingung
von „if“ ist wahr, wenn das öffnen geklappt hat.)
Generieren Sie in dieser Subroutine einen Rückgabewert, in dem Sie
unterscheiden, ob der Zugriff auf die Datei fehlschlug oder gelungen ist. Nur, wenn
das erfolgreich war, soll der Rest des Programms ausgeführt werden.
2. Das Suchen innerhalb des Hashes nach einem Eintrag.
In dieser Methode soll die Suche in dem Hash nach einem Namen vom restlichen
Programmcode getrennt werden. Als Parameter soll dieser Methode die Such-
Eingabe des Benutzers übergeben werden. Sie soll dann, nach einer Überprüfung,
ob es einen solchen Schlüssel gibt, den Wert zum Schlüssel als Rückgabewert an
das Hauptprogramm zurückgeben. Wenn kein Schlüssel gefunden wurde, soll als
Rückgabewert ein String mit einer Nachricht zurückgegeben werden.
Grundsätzlich ergibt sich also folgende Struktur:
Beim Starten des Programm, startet die Subroutine zum Laden der Adressen aus der
Datei. Falls das erfolgreich war, erzeugt das Programm eine Ausgabe an den Benutzer mit
dem Menü (bspw. 1 = Suchen, 2 = beenden) und liest die Benutzereingabe ein. Falls die
Benutzereingabe „1“ (also „Suchen“) war, startet das Programm die Subroutine für
Suchen. Falls die Eingabe „Beenden“ bedeutete, wird der Benutzer durch eine print-
Ausgabe verabschiedet.


und außerdem diese:

3. Erweitern Sie Ihr Adressbuch um die folgende Funktionalität: Neue Einträge hinzufügen
Eine neue Menüauswahl soll hinzugefügt werden (bspw. 3 => neuer Eintrag hinzufügen).
Wählt der Benutzer diesen Menüpunkt soll eine weitere Subroutine gestartet werden, die
vom Benutzer die Eingaben verlangt, die gespeichert werden sollen. (Bspw: „Geben Sie
einen neuen Namen ein!“ - einlesen -, „Geben Sie eine neue Adresse ein!“ - einlesen -).
Überprüfen Sie vorerst, ob der neue Name im Adressbuch (im Hash) schon existiert, falls
nicht, sollen die Eingaben in die Adressdatei geschrieben werden, damit Sie beim
nächsten Start des Programms auch zur Verfügung stehen.
Ebenso wie bei der Laden-Subroutine soll auch hier entweder 1 (true) oder 0 (false)
zurückgegeben werden, je nachdem ob das Schreiben in die Datei funktioniert hat oder
nicht. (Also „if(open ...) {} else { 'Fehlermeldung' }“.)

Ich weiß, dass es wahrscheinlich einen Grund hat, dass ich das können sollte, aber ich werde versuchen, die klausur ohne die aufgabe selber gelöst zu haben zu bestehen....

Bereits gemacht haben ich:

Code (perl): (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
## Unterprogramme

sub namenladen {
open (ADRESSEN, "<", "adressen.txt")
        while (my $adressen = <ADRESSEN>) {
        my @adressen = split ("\t" $adressen);
        @adressen = keys(%adressen);
        }


sub namensuchen {
my ($str1, $str2) = @_;

if (exists($name{$eingabe})) { return 1; }
else {
print "$str1 und $str2 sind verschieden!\n";
return 0; }
}

##Hauptprogramm

namenladen();
print "Geben Sie eine 1 ein, wenn Sie einen Namen suchen möchten und eine 2 um das Programm zu beenden!";
$name = <>;
chomp $name;
if  ($name == 2) {
        print "Sie haben das Programm beendet!\n ";
        }
elsif ($name == 1) {
        print "Bitte geben Sie den Namen ein, den Sie suchen möchten!\n"; 
        $eingabe = <>;
        chomp ($eingabe)
        while (namensuchen($name, $eingabe)) {
        print "Der Name existiert nicht. Bitte geben Sie einen anderen Namen ein! ";
        $eingabe = <>;
        chomp ($eingabe);
        }
}


aber ich bekomms nicht hin, ich raffs einfach nicht...komme nicht weiter. und Vorraussetzung sind eben die beiden o.g. aufgaben....
kann mir jemand helfen? ich wäre wirklich unglaublich dankbar für Hilfe...

mod-edit pq: perl-tags hinzugefügt
Last edited: 2009-07-07 10:00:21 +0200 (CEST)

View full thread Perl Hilfe