home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 11 / zugriff / reldat.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1987-10-06  |  4.0 KB  |  100 lines

  1. {---------------------------------------------------------------------------}
  2. { Programm RelDat: zeigt die Verwendung einer relativen Datei
  3.                    Zum Schreiben in rel. Datei wird eine erweiterte Put-
  4.                    Prozedur verwendet, bei der die Datensatznummer des zu
  5.                    schreibenden Satzes angegeben wird. Zum Lesen eines
  6.                    Satzes wird ein wie Put erweitertes Get verwendet (s.u.).
  7.     Pascal-System: Pascal ST+ / Atari ST                                    }
  8.  
  9. PROGRAM RelDat;
  10.  
  11. CONST tagesanzahl = 31;                          { Anzahl der Tage im Monat }
  12.  
  13. VAR   i,                                         { Laufvariabele            }
  14.       tag,                                       { ...                      }
  15.       wert       : INTEGER;                      { Einnahmen des Montags    }
  16.       datei      : FILE OF INTEGER;              { Dateivariabele           }
  17.  
  18. {---------------------------------------------------------------------------}
  19. {                     legt eine relative Datei an:                          }
  20. { braucht nur einmal zur Erzeugung einer neuen rel. Datei ausgefuehrt
  21.   werden. Eine bereits bestehende gleichen Namens wird dabei geloescht.     }
  22.  
  23. PROCEDURE init_reldat;
  24.  
  25. BEGIN
  26.   ReWrite(datei, 'reldat.rel');
  27. END;
  28.  
  29. {---------------------------------------------------------------------------}
  30. {                   eroeffnet eine bestehende rel. Datei:                   }
  31. {        In rel. Dateien kann gelesen  u n d  geschrieben werden !          }
  32.  
  33. PROCEDURE open_reldat;
  34.  
  35. BEGIN
  36.   ReSet(datei, 'reldat.rel');
  37. END;
  38.  
  39. {---------------------------------------------------------------------------}
  40. {              schreibt in die Datei den spez. Datensatz:                   }
  41. { PUT ist fuer rel. Dateien um den Parameter 'recnum' erweitert. Die Numer-
  42.   ierung der Datensaetze beginnt bei Null !! Bei den meisten Implementa-
  43.   tionen muessen die Datensaetze durchgehend von der niedrigsten Satz-
  44.   nummer an (hier Null) geschrieben werden. Andere erlauben wiederum ein
  45.   "wirres" schreiben der Datensaetze (z.B. 10, 5, 100, 44, ...).            }
  46.  
  47. PROCEDURE put_rec (recnum, wert: INTEGER);
  48.  
  49. BEGIN
  50.   datei^ := wert;                 { Wert in die Datei-Puffer Variable geben }
  51.   Put(datei, recnum);             { und als Datensatz recnum schreiben      }
  52. END;
  53.  
  54. {---------------------------------------------------------------------------}
  55. {              liest aus der Datei den spez. Datensatz:                     }
  56. { s. put_rec! Wiederum kann bei den meisten Implementationen der Versuch,
  57.   einen nicht vorhandenen Datensatz zu lesen, ein Fehlerabbruch erfolgen.
  58.   Eine andere Moeglichkeit waere, mittels Seek den gewuenschten Daten-
  59.   satz zu suchen und mit Get zu lesen.                                      }
  60.  
  61. PROCEDURE get_rec (recnum: INTEGER; VAR wert: INTEGER);
  62.  
  63. BEGIN
  64.   Get(datei, recnum);    { lese Wert des Datensatzes recnum in Datei-Puffer }
  65.   wert := datei^;        { und aus dem Datei-Puffer in Variable uebernehmen }
  66. END;
  67.  
  68. {---------------------------------------------------------------------------}
  69. {         schreibt die einzelnen Einnahmen in die rel. Datei:               }
  70. { Da der erste rel. Eintrag die Datensatznummer Null hat, wird der Zaehler
  71.   (= Tag) beim Aufruf von put_rec um 1 dekrementiert.                       }
  72.  
  73. PROCEDURE schreibe_tageseinnahmen;
  74.  
  75. VAR zaehler: INTEGER;
  76.  
  77. BEGIN
  78.   FOR zaehler := 1 TO tagesanzahl DO              { schreibe fuer jeden Tag }
  79.     put_rec(Pred(zaehler), zaehler+100);          { seinen Wert + 100       }
  80. END;
  81.  
  82. {-------------------------------- Main -------------------------------------}
  83.  
  84. BEGIN
  85.   init_reldat;
  86.   open_reldat;
  87.   schreibe_tageseinnahmen;
  88.   REPEAT
  89.     Write('Welcher Tag (0=Abbruch) ? ');
  90.     REPEAT
  91.       ReadLn(tag);
  92.     UNTIL tag <= tagesanzahl;
  93.     IF tag > 0 THEN
  94.     BEGIN
  95.       get_rec(Pred(tag), wert);                       { recnum := tag -1 !! }
  96.       WriteLn('Einnahme des ', tag, '. =', wert,' DM');
  97.     END
  98.   UNTIL tag = 0;
  99. END.
  100.