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

Crian
 2009-07-08 12:15
#122964 #122964
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
Bei Aufgabenstellungen, die einem zu komplex sind, um sofort fertigen Code hinzuschreiben, bietet sich immer an, das ganze erstmal solange kleiner zu machen, bis man meint, die Stückchen zu beherrschen.

Du hast ja mit den Funktionen, die du angefangen hast zu schreiben, auch schon ähnliches getan.

Was braucht man nach der Beschreibung?

1) Einlesen der adressbuch.txt (entweder man geht davon aus, dass die in den Speicher passt, oder man arbeitet bei jeder Anfrage in der Datei). Im Aufgabentext steht aber sogar, wie es sein soll ("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 )"
Also muss man das Ding "nur" einlesen.

2) Ein Begrüßungsbildschirm mit dem gewünschten Auswahlmenü

3) Eine Benutzereingabeabfrage

Funktionen, die ausgelöst werden, je nachdem, was der Benutzer eingibt:

4) Suche

5) Programm Beenden (worum muss man sich dabei noch alles kümmern?)

Der Aufgabentext gibt sogar noch weitere Vorgehensweisen vor:

"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.!"

Dies gibt klar an, wie der obige Punkt 1 gestaltet werden soll.


Ferner:
"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."

Dies erklärt, wie bei Punkt 4 vorgegangen werden soll.

Weitere Tipps:
"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."

Hier kann man noch herauslesen, dass beim Beenden (obiger Punkt 5) noch eine Verabschiedung stattfinden soll.

Die erweiterte Aufgabe "3." lasse ich mal eg, da es hier um das grundsätzliche Vorgehen geht.

Also hat man folgende Struktur:

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
46
47
48
49
50
51
52
53
#!/usr/bin/perl
use strict;
use warnings;


main('adressbuch.txt');
exit;



sub main {
my ($adressdatei) = @_;


# adressdatei einlesen
my $adressen = adressdatei_einlesen($adressdatei);

# Benutzer begrüßen, Auswahlmenue
start_gruss();
auswahlmenue($adressen);

} # sub main


sub adressdatei_einlesen {
my ($adressdatei) = @_;

# ...

} # sub adressdatei_einlesen


sub start_gruss {

# ...

} # sub start_gruss


sub auswahlmenue {
my ($adressen) = @_;

while (1) {
# Auswahl ausgeben: 1) Suchen, 2) Beenden
# ...

# Benutzerwahl abfragen
# ...

# Abhängig von der Benutzerwahl reagieren
# ...
}
} # sub auswahlmenue


So etwa wäre in deiner Situation mein erster Ansatz. Nun würde ich sehen, ib das fehlerfrei durch den Compiler läuft, falls ja, würde ich jetzt die einzelnen Punkte angehen, schwierige weiter aufspalten, es fehlen noch die Funktionen für 4 und 5 etwa.

Aber durch diese Teilung wird das Problem einfacher. Einfach weiter teilen, bis die Bröckchen lösbar sind.
Dabei muss man natürlich den Gesamtablauf im Kopf haben.
Last edited: 2009-07-08 12:22:04 +0200 (CEST)
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite

View full thread Perl Hilfe