33
Agenda für heute, 2. Juni, 2005 Permanente Datenspeicherung Permanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten mit Files Sequentielle Files Datentypen: Unterbereiche

Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Embed Size (px)

Citation preview

Page 1: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Agenda für heute, 2. Juni, 2005

• Permanente DatenspeicherungPermanente Datenspeicherung

• Lesen und schreiben in Pascal

• Filetypen: Drei Kategorien

• Arbeiten mit Files

• Sequentielle Files

• Datentypen: Unterbereiche

Page 2: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Permanente Datenspeicherung

Daten, die während der Ausführung eines Computerprogramms erzeugt werden, gehen bei Beendigung des Programms verloren,ausser sie werden als Datei auf ein permanentes Speicher-medium geschrieben.

Solche Dateien werden in Pascal Files genannt.

Auf Filekomponenten kann über die Filevariable zugegriffen werden (z.B. mit den Prozeduren Read, Write).

Ein File ist entweder leer oder es besteht aus einer linearenFolge von Filekomponenten.

Alle Filekomponenten sind strukturell identisch, d.h. sie sind vom gleichen Typ.

2/28

Page 3: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

• Permanente Datenspeicherung

• Lesen und schreiben in PascalLesen und schreiben in Pascal• Filetypen: Drei Kategorien

• Arbeiten mit Files

• Sequentielle Files

• Datentypen: Unterbereiche

Page 4: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Dateneingabe

A:\geleise.pas

ch

Externer Speicher

Arbeitsspeicher

Read(Eingabe,ch);

1

2

3

AssignFile(Eingabe,'A:\geleise.pas');

Reset(Eingabe);

Schritt 3 kann wiederholt werden bis das Ende des Files erreicht wird.

Es soll eine Textdatei, Zeichen um Zeichen, eingelesen werden

Pascal-Anweisungen

3/28

Page 5: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Datenausgabe

A:\geleise.pas

ch

Externer Speicher

Arbeitsspeicher

Write(Ausgabe,ch);

AssignFile(Ausgabe,'A:\geleise.pas');

Rewrite(Ausgabe);

1

2

3

Pascal-Anweisungen

Es soll eine Textdatei, Zeichen um Zeichen, ausgeschriebenwerden

4/28

Page 6: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

• Permanente Datenspeicherung

• Lesen und schreiben in Pascal

• Filetypen: Drei KategorienFiletypen: Drei Kategorien• Arbeiten mit Files

• Sequentielle Files

• Datentypen: Unterbereiche

Page 7: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Typisierte Files

Die Filekomponenten sind von einem in Pascal deklarierbaren Typ.

Beispiele

var

Messwerte: file of real;

Beobachtung: file of boolean;

Sequenz: file of char;

Bezeichner Basistyp

5/28

Page 8: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Untypisierte Files

Wird im Deklarationsabschnitt kein Datentyp angegeben, dann speichert jede Filekomponente ein Byte.

Werden für Zugriffe benutzt, bei denen keine Voraussetzungen für Struktur und Inhalt der entsprechenden Dateien gemacht werden.

Beispiel

var

Eigabedaten,

Ausgabedaten: file; { Folge von Bytes }

6/28

Page 9: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Textfiles

Jede Filekomponente speichert ein Textzeichen.

Sonderformen der Read- und Write-Prozeduren erlauben das Lesen und Schreiben von Werten, die nicht den Typ char haben.

Beispiel

var

Dokument: textfile;

7/28

Page 10: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Wie Files organisiert sind

Fileanfang Fileende

Die Elemente eines Files

Filevariable

Filekomponente

File: Eine verlängerbare Folgevon Filekomponenten

Bewegungsrichtung beim sequentiellen Lesen und Schreiben

Zugriff auf ein sequentielles File

Positionszeiger der Filevariablen

0 Komponentennummer

8/28

Page 11: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

• Permanente Datenspeicherung

• Lesen und schreiben in Pascal

• Filetypen: Drei Kategorien

• Arbeiten mit FilesArbeiten mit Files• Sequentielle Files

• Datentypen: Unterbereiche

Page 12: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Arbeiten mit Files

Damit ein Programm mit externen Dateien arbeiten kann, müssen folgende Schritte ausgeführt werden:

• Das File muss als Filevariable deklariert sein.

• Das File muss durch das Programm geschlossen werden.

• Über die Filevariable wird in die Datei geschrieben oder aus der Datei gelesen.

• Das File muss durch das Programm geöffnet werden.

• Das File muss mit einem ausserhalb des Programms zu kreierenden oder existierenden Dateinamen in Verbindung gebracht werden.

9/28

Page 13: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Deklaration von Files

Deklaration eines Filetyps

type

Messwert = record

XKoord, YKoord: integer;

Wert: real

end;

MesswertDatei: file of Messwert;

10/28

Page 14: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Deklaration von Files

Deklaration einer Filevariablen

var

Messstation1: MesswertDatei;

Messstation2: MesswertDatei;MW1, MW2: Messwert;

oder

var

Messstation1: file of Messwert;

Messstation2: file of Messwert;

Vom gleichen Typ

Nicht vom gleichen Typ

11/28

Page 15: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Zuordnung eines Files zu einer externen Datei: fest

Mit der Prozedur AssignFile wird der Filevariablen eines belie-bigen Dateityps ein in einer Stringkonstanten oder -variablen angegebener Dateiname zugeordnet.

AssignFile(Messstation,'C:\Messung1')

 

Name der Filevariablen Verzeichnispfad und Dateiname

12/28

Page 16: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Zuordnung eines Files zu einer externen Datei: fest

Nach dem Aufruf von AssignFile ist das File Messstation der externen Datei 'Messung1' solange zugeordnet, bis Messstation wieder schlossen wird.

AssignFile nicht für eine bereits geöffnete Dateivariable verwenden!

• Ist keine externe Datei mit dem angegebenen Namen vorhanden, tritt ein Fehler auf.

13/28

Page 17: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Abfangen des Fehlers bei fehlenden Dateien

Mit der Funktion IOResult kann der Status der letzten E/A-Operation abgefragt werden.Dazu muss die automatische E/A-Prüfung mit dem Compiler-Schalter {$I–} deaktiviert werden.

AssignFile(Messstation, 'C:\Messung1') {$I-} {E/A-Prüfung ausschalten}Reset(Messstation);

{$I+} {E/A-Prüfung einschalten}if IOResult = 0 then begin {File wurde fehlerfrei geöffnet}

. . .end

else begin {File konnte nicht geöffnet werden}

14/28

Page 18: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Zuordnung eines Files zu einer externen Datei: variabel

Unter Verwendung der Delphi-Komponente OpenDialog: können Dateinamen interaktiv eingegeben oder bestehende Dateinamen ausgewählt werden:

Nach drücken desButtons Öffnenkann der ausge-wählte Dateinameim Feld FileNameder KomponenteOpenDialoggelesen werden.

AssignFile(Messstation,OpenDialog1.FileName)

15/28

Page 19: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Öffnen eines Files

Lese- oder Schreibzugriffe auf Filekomponenten sind erst möglich nachdem ein File geöffnet worden ist.

Dazu stellt Pascal die Prozeduren

Reset und

Rewrite

zur Verfügung.

In Delphi gibt es zusätzlich die Prozedur

Append um Text an Textfiles anzufügen.

16/28

Page 20: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Öffnen einer bereits vorhandenen Datei

Mit der Prozedur Reset wird eine bereits vorhandene Datei geöffnet:

Reset(Messstation)

• Bei einem Textfile ist die Datei nach dem Öffnen mit Reset schreibgeschützt.

• Ist das zu öffnende File bereits offen, wird es zuerst geschlossen und dann erneut geöffnet. Nach dem Öffnen wird der Positions-zeiger an den Anfang des Files gesetzt.

• Ist keine externe Datei mit dem angegebenen Namen vorhanden, dann tritt ein Fehler auf.

• Reset öffnet die mit AssignFile einer Filevariablen (Messstation) zugewiesene externe Datei.

17/28

Page 21: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Öffnen einer neuen Datei

Die Prozedur Rewrite erstellt eine neue Datei und öffnet sie anschliessend:

Rewrite(Messstation)

• Rewrite erstellt eine neue externe Datei unter dem mit AssignFile einer Filevariablen (Messstation) zugewiesenen Dateinamen.

• Ist das File bereits offen, wird es zuerst geschlossen und dann erneut erstellt. Nach dem Erstellen wird der Positionszeiger an den Anfang des leeren Files gesetzt.

• Ist schon eine gleichnamige externe Datei vorhanden, wird diese gelöscht und an ihrer Stelle die neue Datei angelegt.

18/28

Page 22: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Öffnen eines Textfiles um Text anzufügen

Mit der Prozedur Append wird ein Textfile so für Schreibzugriffe geöffnet, dass die Daten am Ende des Files angefügt werden:

Append(Messstation) • Die Textfilevariable (Messstation) muss mit AssignFile einer

externen Datei zugeordnet worden sein.

• Der Positionszeiger wird auf das Fileende gesetzt. Im Gegensatz zu Rewrite wird mit Append eine bestehende Datei nicht gelöscht.

• Ist das File bereits offen, wird es zuerst geschlossen und dann erneut geöffnet.

19/28

Page 23: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Schliessen eines Files

Mit der Prozedur CloseFile wird ein File geschlossen. Diese Operation stellt sicher, dass alle Daten in die externe Datei geschrieben werden.

Nach CloseFile kann die Filevariable mit AssignFile einer anderen (oder nochmals der gleichen) externen Datei zugeordnet werden.

  AssignFile(Messstation, 'C:\Messung1')

Reset(Messstation);

{ Datei Messung1 verarbeiten }

CloseFile(Messstation);

AssignFile(Messstation, 'A:\NeueMessung')

Reset(Messstation);

{ Datei NeueMessung verarbeiten }

20/28

Page 24: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Hinweis

• Für die Verarbeitung von Dateien werden Prozeduren und Funktionen eingesetzt, die vom Programmiersystem als Teil einer Programmbibliothek zur Verfügung gestellt werden.

• Beachten Sie deshalb die Konventionen, die für Ihre Programmierumgebung gelten. Die Prozedur für die Zuordnung von Filevariablen an externe Dateinamen beispielsweise heisst in Turbo-Pascal Assign (in Delphi heisst sie AssignFile).

• Sie sind nicht Teil der Syntax von Pascal und somit nicht "portabel".

21/28

Page 25: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

• Permanente Datenspeicherung

• Lesen und schreiben in Pascal

• Filetypen: Drei Kategorien

• Arbeiten mit Files

• Sequentielle FilesSequentielle Files• Datentypen: Unterbereiche

Page 26: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Schreiben einer sequentiellen Datei

AssignFile(F,'D')

Rewrite(F)

F D

DF

0

Write(F,V) F D

V 1

Schematische Darstellung

Write(F,V) F D

V 2

Vorsicht:Rewrite löscht den Inhalt einerbestehenden Datei!

22/28

Page 27: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Lesen einer sequentiellen Datei

Schematische Darstellung

AssignFile(F,'D')

Reset(F)

F D

DF

0

Read(F,V) F D

V 1

Read(F,V) F

V 2

D

23/28

Page 28: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Lesen einer sequentiellen Datei

Schematische Darstellung

Read(F,V) F D

V n

Read(F,V) F

V n+1

D

Eine weitere Read-Anweisung würde zu einem Laufzeitfehler führen.

Mit der Funktion Eof (End of file) können wir prüfen, ob das Ende eines Files erreicht wurde (oder ob ein File leer ist).

Eof(F) = true

24/28

Page 29: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

• Permanente Datenspeicherung

• Lesen und schreiben in Pascal

• Filetypen: Drei Kategorien

• Arbeiten mit Files

• Sequentielle Files

• Datentypen: UnterbereicheDatentypen: Unterbereiche

Page 30: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Unterbereichstypen

Wird bei der Verwendung einer Variablen vorausgesetzt, dass sie nur Werte innerhalb eines zusammenhängenden Teilbereichs eines ordinalen Typs annehmen darf, dann kann dies durch das Deklarieren eines Unterbereichstyps überwacht werden.

const n = 1000;type Teilbereich = 1..n;var x: Teilbereich;

oder:var x: 1..1000;

Die Konstanten, welche die Bereichsgrenzen angeben, müssen vom gleichen ordinalen Typ, dem Host-Typ sein.

Alle Operationen, die über den Werten des Host-Typs zulässig sind, können auch über den Werten des Unterbereichstyps ausgeführt werden.

25/28

Page 31: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Unterbereichstypen

Beispieletype Kleinbuchstabe = 'a'..'z'; Ziffer = '0'..'9'; Index = 1..25; Werktag = Montag..Freitag;

Als Unterbereich des Aufzählungstyps Tag

varEingabezeichen: Kleinbuchstabe;

A: array[Index] of real;

Arbeitstag: Werktag;

Wtage: array[Werktag] of integer;

x: integer;

x:= Wtage[dienstag]

26/28

Page 32: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Unterbereichstypen: Eigenschaften

Verschiedene Unterbereiche eines bestimmten Typs können im gleichen Ausdruck vorkommen.

var klein: 1..10; mittel: 0..100; gross: integer;

Der folgende Ausdruck ist gültig:

klein * mittel + gross

27/28

Page 33: Agenda für heute, 2. Juni, 2005 Permanente DatenspeicherungPermanente Datenspeicherung Lesen und schreiben in Pascal Filetypen: Drei Kategorien Arbeiten

Programmieren und Problemlösen © Institut für Computational Science, ETH Zürich

Unterbereichstypen: Eigenschaften

Unterbereichstypen können auf beiden Seiten einer Zuweisungs-anweisung stehen:

0..100 1..10

mittel:= klein;

klein:= mittel;

1..10 0..100

Prüfung nur während der Programmausführung möglich.

(Mit Bereichsprüfung kompilieren).

28/28