Claus SchönleberHitchhacker´s Guide To PASCAL [Vol. 2] |
||
|
[ Start | Beispielprogramme Download | Home ] | |
InhaltTypisierteKonstanten Sets (Mengen) Rekursion Records Dateien (Random Access) Pointer Algorithmen - Hashing - Sortieren |
Dateien [2]: Random Access DateienIn Kurs 1 wurden Dateien schon angesprochen und mit sequentiellen Dateien verwendet. Nun kommen wir zu einer anderen Organisationsform, die durch eine Einschränkung einige Freiheiten bringt, die wir bei sequentiellen Dateien nicht hatten.Eigenschaften:
<variable> : FILE OF <typ> seek (<dateivariable>,<position>) filesize (<dateivariable>) Das Programm macht nichts anderes, als 100 Zufallszahlen in Zeichen zu verwandeln und in eine Datei wegzuschreiben. Danach kann man eine Datensatznummer eingeben und bekommt das dort gespeicherte Zeichen auf dem Bildschirm angezeigt. Bei Eingabe von -1 terminiert das Programm. Die kleine REPEAT-Schleife dient nur zum Abfangen eines Eingabefehlers.PROGRAM rad; VAR workfile : FILE OF char; c : char; i : integer; BEGIN assign (workfile,'CHARS.DAT'); rewrite (workfile); FOR i := 1 TO 100 DO BEGIN c := chr (random (127) + 1); write (workfile,c); END; close (workfile); reset (workfile); writeln ('Die Datei hat ',filesize (workfile),' Datensätze.'); writeln; REPEAT REPEAT write ('Datensatznummer: '); readln (i); UNTIL (i >= -1) AND (i <= 100); IF (i >= 0) THEN BEGIN seek (workfile,i); read (workfile,c); writeln ('Datensatznummer ',i,' ASCII-Zeichen Nr. ',ord (c)); END; UNTIL (i = -1); close (workfile); END. Natürlich sind Random Access Dateien nicht immer so einfach in ihrer Struktur. Wie oben schon erwähnt, werden häufig nicht einfache Typen, sondern RECORD-Typen zur Datensatzdefinition herangezogen. Eine solche Definition kann dann so aussehen: Die Variable "object" dient als Vermittler oder Puffer zwischen Datei und Ein-/Ausgabegerät. Sie ist mit "c" im obigen Beispiel zu vergleichen. Ihr Inhalt wird in die Datei geschrieben oder sie bekommt die Daten eines Datensatzes aus der Datei beim Lesevorgang.TYPE person = RECORD name, vorname, strasse, ort, telefon : STRING [50]; privat : boolean; END; VAR workfile : FILE OF person; object : person; Bei der Benutzung von solchen Dateien drängt sich natürlich
die Frage auf, wie findet man ein gesuchtes Datum. Am einfachsten natürlich,
wenn die Datei Datensatz für Datensatz durchsucht wird. Aber wir sind
ja nicht auf diese "Brute Force"-Methode beschränkt wie bei der sequentiellen
Datei. Eine weitere einfache Methode ist die Eingabe der Datensatznummer
wie im letzten Programmbeispiel. Man könnte die Datensatznummer als
Artikelnummer oder Personalnummer interpretieren und anhand einer Liste
diese Nummer ermitteln. Aber es gibt natürlich noch andere Methoden.
Es würde zu weit führen, in einem PASCAL-Lehrbuch allgemeine
Programmiermethoden der fortgeschrittenen Art zu besprechen. Unter dem
Stichwort "Hashing" wird in einem
späteren Kapitel noch Einführendes zu diesem Thema erläutert.
|
|
|
(c) 2001 Schoenleber.com |