home *** CD-ROM | disk | FTP | other *** search
- {---------------------------------------------------------------------------}
- { Programm RelDat: zeigt die Verwendung einer relativen Datei
- Zum Schreiben in rel. Datei wird eine erweiterte Put-
- Prozedur verwendet, bei der die Datensatznummer des zu
- schreibenden Satzes angegeben wird. Zum Lesen eines
- Satzes wird ein wie Put erweitertes Get verwendet (s.u.).
- Pascal-System: Pascal ST+ / Atari ST }
-
- PROGRAM RelDat;
-
- CONST tagesanzahl = 31; { Anzahl der Tage im Monat }
-
- VAR i, { Laufvariabele }
- tag, { ... }
- wert : INTEGER; { Einnahmen des Montags }
- datei : FILE OF INTEGER; { Dateivariabele }
-
- {---------------------------------------------------------------------------}
- { legt eine relative Datei an: }
- { braucht nur einmal zur Erzeugung einer neuen rel. Datei ausgefuehrt
- werden. Eine bereits bestehende gleichen Namens wird dabei geloescht. }
-
- PROCEDURE init_reldat;
-
- BEGIN
- ReWrite(datei, 'reldat.rel');
- END;
-
- {---------------------------------------------------------------------------}
- { eroeffnet eine bestehende rel. Datei: }
- { In rel. Dateien kann gelesen u n d geschrieben werden ! }
-
- PROCEDURE open_reldat;
-
- BEGIN
- ReSet(datei, 'reldat.rel');
- END;
-
- {---------------------------------------------------------------------------}
- { schreibt in die Datei den spez. Datensatz: }
- { PUT ist fuer rel. Dateien um den Parameter 'recnum' erweitert. Die Numer-
- ierung der Datensaetze beginnt bei Null !! Bei den meisten Implementa-
- tionen muessen die Datensaetze durchgehend von der niedrigsten Satz-
- nummer an (hier Null) geschrieben werden. Andere erlauben wiederum ein
- "wirres" schreiben der Datensaetze (z.B. 10, 5, 100, 44, ...). }
-
- PROCEDURE put_rec (recnum, wert: INTEGER);
-
- BEGIN
- datei^ := wert; { Wert in die Datei-Puffer Variable geben }
- Put(datei, recnum); { und als Datensatz recnum schreiben }
- END;
-
- {---------------------------------------------------------------------------}
- { liest aus der Datei den spez. Datensatz: }
- { s. put_rec! Wiederum kann bei den meisten Implementationen der Versuch,
- einen nicht vorhandenen Datensatz zu lesen, ein Fehlerabbruch erfolgen.
- Eine andere Moeglichkeit waere, mittels Seek den gewuenschten Daten-
- satz zu suchen und mit Get zu lesen. }
-
- PROCEDURE get_rec (recnum: INTEGER; VAR wert: INTEGER);
-
- BEGIN
- Get(datei, recnum); { lese Wert des Datensatzes recnum in Datei-Puffer }
- wert := datei^; { und aus dem Datei-Puffer in Variable uebernehmen }
- END;
-
- {---------------------------------------------------------------------------}
- { schreibt die einzelnen Einnahmen in die rel. Datei: }
- { Da der erste rel. Eintrag die Datensatznummer Null hat, wird der Zaehler
- (= Tag) beim Aufruf von put_rec um 1 dekrementiert. }
-
- PROCEDURE schreibe_tageseinnahmen;
-
- VAR zaehler: INTEGER;
-
- BEGIN
- FOR zaehler := 1 TO tagesanzahl DO { schreibe fuer jeden Tag }
- put_rec(Pred(zaehler), zaehler+100); { seinen Wert + 100 }
- END;
-
- {-------------------------------- Main -------------------------------------}
-
- BEGIN
- init_reldat;
- open_reldat;
- schreibe_tageseinnahmen;
- REPEAT
- Write('Welcher Tag (0=Abbruch) ? ');
- REPEAT
- ReadLn(tag);
- UNTIL tag <= tagesanzahl;
- IF tag > 0 THEN
- BEGIN
- get_rec(Pred(tag), wert); { recnum := tag -1 !! }
- WriteLn('Einnahme des ', tag, '. =', wert,' DM');
- END
- UNTIL tag = 0;
- END.
-