home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 12 / relseq.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-09-29  |  5.7 KB  |  155 lines

  1. (* ----------------------------------------------------------------------- *)
  2. (*                                RELSEQ.PAS                               *)
  3. (* demonstriert die Anwendung einer sequentiell, relativen Datei und kann  *)
  4. (* als Grundstock fuer eine eigene Dateiverwaltung dienen.                 *)
  5. (* Konfiguration: Atari St & Pascal ST Plus                                *)
  6.  
  7. PROGRAM REL_SEQ;
  8.  
  9. CONST   max = 1000;                       (* maximale Anzahl der Eintraege *)
  10.  
  11. TYPE    person = RECORD                   (* Feldinhalt                    *)
  12.                    vorname: STRING[20]
  13.                  END;
  14.         letter = ARRAY[1..max] OF CHAR;   (* Feld der Buchstaben           *)
  15.  
  16. VAR     zaehler,                          (* Anzahl der Eintraege          *)
  17.         wahl      : INTEGER;              (* Wahlpunkte des Menues         *)
  18.         ende      : BOOLEAN;              (* Programmende ?                *)
  19.         anzahl    : FILE OF INTEGER;      (* File der Anzahl               *)
  20.         anf_buch  : FILE OF CHAR;         (* File der Buchstaben           *)
  21.         rel_dat   : FILE OF person;       (* File der Vornamen             *)
  22.         buchstabe : letter;               (* Feld der Anfangsbuchstaben    *)
  23.         name      : person;               (* Hier wird der Name eingegeben *)
  24.  
  25.  
  26. PROCEDURE create_rel;                       (* legt eine relative Datei an *)
  27. BEGIN
  28.   ReWrite(reldat,'reldat.rel');
  29. END;
  30.  
  31.  
  32. (* laedt die seq. Datei. Hier stehen in unserem Beispiel immer die An-     *)
  33. (*                       fangsbuchstaben des Namens:                       *)
  34. PROCEDURE lade_seq;
  35.  
  36. VAR   i: INTEGER;
  37.  
  38. BEGIN
  39.   ReSet(anzahl,'anzahl.seq');             (* oeffne Datei ANZAHL,in der die
  40.                                             Anzahl der Eintraege steht.    *)
  41.   zaehler := anzahl^;                     (* Uebergib die Anzahl in den
  42.                                              ZAEHLER                       *)
  43.   ReSet(anf_buch,'buchst.seq');
  44.   FOR i := 1 TO zaehler DO BEGIN        (* lade in das Feld der Buchstaben *)
  45.     buchstabe[i] := anf_buch^;          (* die einzelnen Buchstaben        *)
  46.     Get(anf_buch)                       (* und positioniere neu.           *)
  47.   END
  48. END;
  49.  
  50.  
  51. (*              initialisiert das Programm mit notwendigen Daten           *)
  52. PROCEDURE initialisiere;
  53. BEGIN
  54.   lade_seq;                              (* laedt seq. Datei               *)
  55.   ende := FALSE;                         (* keine Ende !                   *)
  56. END;
  57.  
  58.  
  59. (*                speichert den Vornamen in der relativen Datei            *)
  60. PROCEDURE save_rel_eintrag;
  61. BEGIN
  62.   ReSet(rel_dat,'reldat.rel');           (* oeffne rel.Datei               *)
  63.   rel_dat^ := name;                      (* Zeiger weist auf den Namen     *)
  64.   Seek(rel_dat,zaehler-1);               (* positioniere                   *)
  65.   Put(rel_dat)                           (* und schreibe.                  *)
  66. END;
  67.  
  68.  
  69. (*                 speichert den Vornamen in der relativen Datei           *)
  70. PROCEDURE hole_rel_eintrag(zaehler:INTEGER);
  71. BEGIN
  72.   ReSet(rel_dat,'reldat.rel');           (* oeffne rel.Datei               *)
  73.   Seek(rel_dat,zaehler-1);               (* positioniere                   *)
  74.   Get(rel_dat);                          (* hole aus Puffer...             *)
  75.   name := rel_dat^;                      (* ... den Namen.                 *)
  76.   WriteLn;
  77.   WriteLn('Gefundener Eintrag ist ',name.vorname,
  78.           ' auf Feldnummer: ',zaehler-1);
  79. END;
  80.  
  81.  
  82. (*           Eingeben des Vornames und abspeichern im rel.Feld             *)
  83. PROCEDURE eingeben;
  84.  
  85. VAR  zeichen  : STRING;
  86.  
  87. BEGIN
  88.   zaehler := zaehler+1;                     (* erhoehe den Zaehler         *)
  89.   name.vorname := '....................';   (* initialisiere den Namen     *)
  90.   WriteLn('-------------');
  91.   Write('Bitte den Vornamen eingeben:  ');
  92.   ReadLn(name.vorname);
  93.   zeichen := Copy(name.vorname,1,1);    (* zweige den ersten Buchstaben ab *)
  94.   buchstabe[zaehler] := zeichen[1];     (* und konvertiere STRING -> CHAR  *)
  95.   save_rel_eintrag                      (* speichere ihn ab                *)
  96. END;
  97.  
  98.  
  99. (*                   hole den rel.Eintrag und zeige ihn an                 *)
  100. PROCEDURE ausgeben;
  101.  
  102. VAR eingabe : STRING[20];
  103.     i       : INTEGER;
  104.     zeichen : STRING[1];
  105.  
  106. BEGIN
  107.   WriteLn('---------------');
  108.   Write('Bitte den Suchvornamen eingeben:  ');
  109.   ReadLn(eingabe);
  110.   WriteLn('Ich suche !!');
  111.   FOR i :=  1 TO zaehler DO BEGIN        (* durchsuche seq.Datei und hole  *)
  112.     zeichen := Copy(eingabe,1,1);        (* Eintrag, wenn erster Buchstabe *)
  113.     IF zeichen=buchstabe[i] THEN hole_rel_eintrag(i);  (* identisch        *)
  114.   END
  115. END;
  116.  
  117.  
  118. (*                 speichert die seq. Datei und den Zaehlerstand           *)
  119. PROCEDURE programmende;
  120.  
  121. VAR i : INTEGER;
  122.  
  123. BEGIN
  124.   ende := TRUE;                          (* Ende erreicht                  *)
  125.   ReWrite(anzahl,'anzahl.seq');          (* speichere den Zaehlerstand ab  *)
  126.   anzahl^ := zaehler;
  127.   Put(anzahl);
  128.   ReWrite(anf_buch,'buchst.seq');        (* oeffne Buchstabendatei         *)
  129.   FOR i :=  1 TO zaehler DO BEGIN        (* und speichere alle             *)
  130.     anf_buch^ := buchstabe[i];           (* Buchstaben ab.                 *)
  131.     Put(anf_buch)
  132.   END
  133. END;
  134.  
  135.  
  136. BEGIN  (* REL_SEQ *)
  137.   initialisiere;
  138.   REPEAT
  139.     WriteLn('MENUE');
  140.     WriteLn('-----');
  141.     WriteLn('1 - Namen eingeben');
  142.     WriteLn('2 - Namen ausgeben');
  143.     WriteLn('3 - Realtive Datei anlegen');
  144.     WriteLn('4 - Programmende');
  145.     Write('Wahl:');
  146.     Read(wahl);
  147.     CASE wahl OF
  148.       1: eingeben;
  149.       2: ausgeben;
  150.       3: create_rel;
  151.       4: programmende
  152.     END;
  153.   UNTIL ende;
  154. END.
  155.