Thread Perl Hilfe
(26 answers)
Opened by Julie at 2009-07-07 09:20
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) |