Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Direkte Filezugriffe Agenda für heute, 22. Juni, 2006

Ähnliche Präsentationen


Präsentation zum Thema: "Direkte Filezugriffe Agenda für heute, 22. Juni, 2006"—  Präsentation transkript:

1 Direkte Filezugriffe Agenda für heute, 22. Juni, 2006
Datentypen: Mengen Individualisierbare Datentypen

2 Das Problem sequentieller Dateien:
Direkte Filezugriffe Das Problem sequentieller Dateien: Zugriff auf die k-te Filekomponente bedingt k Leseoperationen Schreiben ist nur am Ende der Datei möglich Die Lösung: Mit der Prozedur Seek den Positionszeiger einer Filevariablen F direkt auf die Position k setzen Eine nachfolgende Read- oder Write-Operation betrifft die Filekompenente k Seek(F, k); 2/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

3 Eingabedaten: file of Integer; Messung: Integer; begin
Direkte Filezugriffe Beispiel var Eingabedaten: file of Integer; Messung: Integer; begin AssignFile(Eingabedaten,'C:\Messwerte') Reset(Eingabedaten); 3/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

4 Read(Eingabedaten, Messung); Seek(Eingabedaten,79);
Direkte Filezugriffe Beispiel Der 21. Eintrag in der Datei Eingabedaten in die 80. Position derselben Datei schreiben: Seek(Eingabedaten,20); Read(Eingabedaten, Messung); Seek(Eingabedaten,79); Write(Eingabedaten,Messung) 4/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

5 Seek(F, FileSize(Eingabedaten));
Direkte Filezugriffe Beispiel Datei vergrössern: Seek(F, FileSize(Eingabedaten)); Dieser Prozeduraufruf setzt den Positionszeiger ans Dateiende FileSize kann nicht für Textdateien verwendet werden 5/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

6 Zusammenhängende Bereiche einer direkten Datei verarbeiten:
Direkte Filezugriffe Beispiel Zusammenhängende Bereiche einer direkten Datei verarbeiten: Seek(Eingabedaten,100); for i:= 101 to 200 do begin Read(Eingabedaten,Messung); { Messung verarbeiten } end Was aber, wenn die Datei Eingabedaten nur 150 Elemente enthält? 6/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

7 Direkte Filezugriffe Um Zugriffsfehler zu verhindern: var s: Integer;
begin s:= FileSize(Eingabedaten); Seek(Eingabedaten,100); for i:= 101 to 200 do if i <= s then Read(Eingabedaten,Messung); { Messung verarbeiten } end; 7/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

8 Standardprozeduren und -funktionen für Files
AssignFile Weist einer Dateivariablen den Namen einer externen Datei zu. CloseFile Schliesst eine geöffnete Datei. Eof Prüft, ob das Ende der Datei erreicht ist. Erase Löscht eine externe Datei. FilePos Liefert die aktuelle Position innerhalb einer Datei. FileSize Liefert die aktuelle Grösse einer Datei. GetDir Ermittelt das aktuelle Verzeichnis eines Laufwerks. IOResult Liefert den Status der zuletzt durchgeführten Ein-/Ausgabe-Operation. MkDir Erzeugt ein Unterverzeichnis. Rename Benennt eine externe Datei um. Reset Öffnet eine existierende Datei. Rewrite Erzeugt und öffnet eine neue Datei. RmDir Löscht ein leeres Unterverzeichnis. Seek Bewegt den Positionszeiger zur angegebenen Filekomponente. Truncate Schneidet eine Datei an der aktuellen Position ab. 8/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

9 Standardprozeduren und -funktionen für Files
Append Öffnet eine existierende Datei für das Anhängen weiterer Daten. Eoln Prüft, ob das Zeilenende in einer Textdatei erreicht ist. Flush Leert den Puffer einer Textdatei, die für die Ausgabe geöffnet wurde. Read Bei typisierten Dateien: liest eine oder mehrere Komponenten in eine Variable. Bei Textdateien: liest einen oder mehrere Werte in eine oder mehrere Variablen. Readln Führt einen Aufruf von Read aus und springt dann zum Anfang der nächsten Zeile der Datei. SeekEof Liefert den Dateiendestatus einer Datei (EOF) zurück. SeekEoln Liefert den Zeilenendestatus einer Datei (EOLN) zurück. SetTextBuf Weist einer Textdatei einen Ein-/Ausgabepuffer zu. Write Bei typisierten Dateien: Schreibt eine Variable in eine Dateikomponente. Bei Textdateien: Schreibt einen oder mehrere Werte in die Datei. Writeln Ruft die Prozedur Write auf und schreibt dann einen Zeilenvorschub in die Datei. 9/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

10 Direkte Filezugriffe Datentypen: Mengen Individualisierbare Datentypen

11 Mengentypen Jeder Datentyp definiert eine Menge von Werten.
Im Falle des Mengentyps ist es die Menge aller möglichen Mengen, die aus den Elementen eines gegebenen Basistyps bestehen. Beispiel Type Aufzählungstyp Farbe = (rot, gruen, blau); S = set of Farbe; Basistyp (max. 256 Elemente) 10/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

12 Mengentypen: Eigenschaften
Die Werte des Typs S sind die Mengen: [], [rot], [gruen], [blau], [rot, gruen], [rot, blau], [gruen, blau], [rot, gruen, blau] Hat der Basistyp n unterschiedliche Werte, dann besitzt ihr Mengentyp 2n Werte. Die Basis eines Mengentyps muss ein Ordinaltyp sein. (Aufzählungs- oder Unterbereichstyp) Die Ordinalwerte der oberen und unteren Grenzen des Basistyps müssen im Bereich liegen. 11/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

13 Mengentypen: Operationen
Vereinigung + [rot] + [gruen] ⇨ [rot, gruen] Durchschnitt * [rot, gruen] * [gruen, blau] ⇨ [gruen] Differenz – [rot, gruen, blau] – [gruen] ⇨ [rot, blau] Element in (Mengenzugehörigkeit) [rot] in [rot, gruen] ⇨ TRUE 12/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

14 Mengentypen: Operationen
Vergleich = Gleichheit <> Ungleichheit <= Teilmenge >= Obermenge [rot] = [rot, blau] ⇨ FALSE [rot] <> [rot, blau] ⇨ TRUE [rot] <= [rot, blau] ⇨ TRUE [rot] >= [rot, blau] ⇨ FALSE 13/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

15 Mengentypen: Anwendungsbeispiele
Vergleichsoperationen werden durch den Mengentyp vereinfacht: var ch: Char; ('0' <= ch) and (ch <= '9') ist wahr, wenn ch eine Ziffer darstellt Der Mengentyp erlaubt einen bündigeren, besser lesbaren Ausdruck: ch in ['0'..'9'] Oft müssen beim Lesen einer Datei bestimmte Werte übersprungen werden. Die Anweisung: while ch in [' ',',','.',';',':'] do read(F,ch); "springt" über Leerzeichen und Satzzeichen in der File "F". 14/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

16 Mengentypen: Anwendungsbeispiele
Das Kombinieren verschiedener Objekte wird durch den Mengentyp vereinfacht: type Zutaten = (Aepfel, Erdbeeren, Bananen, Nuesse, Icecream, Schokolade, Rahm, Zucker); Dessert = set of Zutaten; var Bananensplit, Strudel, Bananensplit_plus: Dessert; Bananensplit:= [Bananen, Icecream, Schokolade]; Bananensplit_plus:= Bananensplit + [Rahm]; 15/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

17 Mengentypen: Anwendungsbeispiele
Test auf Mengenzugehörigkeit: var Rahmschlagen: boolean; Rahmschlagen:= Rahm in Bananensplit; Rahmschlagen:= Rahm in Bananensplit_plus; False True 16/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

18 Individualisierbare Datentypen
Direkte Filezugriffe Datentypen: Mengen Individualisierbare Datentypen

19 Kategorien von Datentypen
Standardtypen Dazu gehören: Integer, Real, Boolean und Char. Die Eigenschaften dieser Typen wird durch den Pascal-Standard und die verwendete Programmierumgebung bestimmt. Individualisierbare Typen Dazu gehören: Aufzählungstyp, Unterbereichstyp, Mengentyp, Arraytyp, Recordtyp, Filetyp, Zeigertyp. Die Eigenschaften dieser Typen können Programmiererinnen und Programmierer im Deklarationsabschnitt selber definieren. 17/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

20 Arrays als Typen const N = 50; type
zeichenarray = array ['a'..'z'] of Integer; var B: array [1..N] of zeichenarray; {ein zweidimensionaler Array, der mit ganzen Zahlen und Buchstaben indiziert wird} 18/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

21 Records als Typen type Monate = (Jan,Feb,Mar,Apr,Mai,Jun,
Jul,Aug,Sep,Okt,Nov,Dez); Datum = record Tag: 1..31; Monat: Monate; Jahr: Integer end; Aufzählungstyp Unterbereichstyp Person = record Name: string[50]; Geschl: (M, W, KA); GebTag: Datum end; var d1, d2: Datum; p1, p2, p3: Person; PListe: array[1..100] of Person; 19/19 Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich


Herunterladen ppt "Direkte Filezugriffe Agenda für heute, 22. Juni, 2006"

Ähnliche Präsentationen


Google-Anzeigen