home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------------------------- *)
- (* RELSEQ.PAS *)
- (* demonstriert die Anwendung einer sequentiell, relativen Datei und kann *)
- (* als Grundstock fuer eine eigene Dateiverwaltung dienen. *)
- (* Konfiguration: Atari St & Pascal ST Plus *)
-
- PROGRAM REL_SEQ;
-
- CONST max = 1000; (* maximale Anzahl der Eintraege *)
-
- TYPE person = RECORD (* Feldinhalt *)
- vorname: STRING[20]
- END;
- letter = ARRAY[1..max] OF CHAR; (* Feld der Buchstaben *)
-
- VAR zaehler, (* Anzahl der Eintraege *)
- wahl : INTEGER; (* Wahlpunkte des Menues *)
- ende : BOOLEAN; (* Programmende ? *)
- anzahl : FILE OF INTEGER; (* File der Anzahl *)
- anf_buch : FILE OF CHAR; (* File der Buchstaben *)
- rel_dat : FILE OF person; (* File der Vornamen *)
- buchstabe : letter; (* Feld der Anfangsbuchstaben *)
- name : person; (* Hier wird der Name eingegeben *)
-
-
- PROCEDURE create_rel; (* legt eine relative Datei an *)
- BEGIN
- ReWrite(reldat,'reldat.rel');
- END;
-
-
- (* laedt die seq. Datei. Hier stehen in unserem Beispiel immer die An- *)
- (* fangsbuchstaben des Namens: *)
- PROCEDURE lade_seq;
-
- VAR i: INTEGER;
-
- BEGIN
- ReSet(anzahl,'anzahl.seq'); (* oeffne Datei ANZAHL,in der die
- Anzahl der Eintraege steht. *)
- zaehler := anzahl^; (* Uebergib die Anzahl in den
- ZAEHLER *)
- ReSet(anf_buch,'buchst.seq');
- FOR i := 1 TO zaehler DO BEGIN (* lade in das Feld der Buchstaben *)
- buchstabe[i] := anf_buch^; (* die einzelnen Buchstaben *)
- Get(anf_buch) (* und positioniere neu. *)
- END
- END;
-
-
- (* initialisiert das Programm mit notwendigen Daten *)
- PROCEDURE initialisiere;
- BEGIN
- lade_seq; (* laedt seq. Datei *)
- ende := FALSE; (* keine Ende ! *)
- END;
-
-
- (* speichert den Vornamen in der relativen Datei *)
- PROCEDURE save_rel_eintrag;
- BEGIN
- ReSet(rel_dat,'reldat.rel'); (* oeffne rel.Datei *)
- rel_dat^ := name; (* Zeiger weist auf den Namen *)
- Seek(rel_dat,zaehler-1); (* positioniere *)
- Put(rel_dat) (* und schreibe. *)
- END;
-
-
- (* speichert den Vornamen in der relativen Datei *)
- PROCEDURE hole_rel_eintrag(zaehler:INTEGER);
- BEGIN
- ReSet(rel_dat,'reldat.rel'); (* oeffne rel.Datei *)
- Seek(rel_dat,zaehler-1); (* positioniere *)
- Get(rel_dat); (* hole aus Puffer... *)
- name := rel_dat^; (* ... den Namen. *)
- WriteLn;
- WriteLn('Gefundener Eintrag ist ',name.vorname,
- ' auf Feldnummer: ',zaehler-1);
- END;
-
-
- (* Eingeben des Vornames und abspeichern im rel.Feld *)
- PROCEDURE eingeben;
-
- VAR zeichen : STRING;
-
- BEGIN
- zaehler := zaehler+1; (* erhoehe den Zaehler *)
- name.vorname := '....................'; (* initialisiere den Namen *)
- WriteLn('-------------');
- Write('Bitte den Vornamen eingeben: ');
- ReadLn(name.vorname);
- zeichen := Copy(name.vorname,1,1); (* zweige den ersten Buchstaben ab *)
- buchstabe[zaehler] := zeichen[1]; (* und konvertiere STRING -> CHAR *)
- save_rel_eintrag (* speichere ihn ab *)
- END;
-
-
- (* hole den rel.Eintrag und zeige ihn an *)
- PROCEDURE ausgeben;
-
- VAR eingabe : STRING[20];
- i : INTEGER;
- zeichen : STRING[1];
-
- BEGIN
- WriteLn('---------------');
- Write('Bitte den Suchvornamen eingeben: ');
- ReadLn(eingabe);
- WriteLn('Ich suche !!');
- FOR i := 1 TO zaehler DO BEGIN (* durchsuche seq.Datei und hole *)
- zeichen := Copy(eingabe,1,1); (* Eintrag, wenn erster Buchstabe *)
- IF zeichen=buchstabe[i] THEN hole_rel_eintrag(i); (* identisch *)
- END
- END;
-
-
- (* speichert die seq. Datei und den Zaehlerstand *)
- PROCEDURE programmende;
-
- VAR i : INTEGER;
-
- BEGIN
- ende := TRUE; (* Ende erreicht *)
- ReWrite(anzahl,'anzahl.seq'); (* speichere den Zaehlerstand ab *)
- anzahl^ := zaehler;
- Put(anzahl);
- ReWrite(anf_buch,'buchst.seq'); (* oeffne Buchstabendatei *)
- FOR i := 1 TO zaehler DO BEGIN (* und speichere alle *)
- anf_buch^ := buchstabe[i]; (* Buchstaben ab. *)
- Put(anf_buch)
- END
- END;
-
-
- BEGIN (* REL_SEQ *)
- initialisiere;
- REPEAT
- WriteLn('MENUE');
- WriteLn('-----');
- WriteLn('1 - Namen eingeben');
- WriteLn('2 - Namen ausgeben');
- WriteLn('3 - Realtive Datei anlegen');
- WriteLn('4 - Programmende');
- Write('Wahl:');
- Read(wahl);
- CASE wahl OF
- 1: eingeben;
- 2: ausgeben;
- 3: create_rel;
- 4: programmende
- END;
- UNTIL ende;
- END.
-