Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration...

37
Agenda für heute, 1. Juni, 2006 Permanente Datenspeicherung Permanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien Sequentielle Files

Transcript of Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration...

Page 1: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

Agenda für heute, 1. Juni, 2006

• Permanente DatenspeicherungPermanente Datenspeicherung

• Deklaration von Files

• Files verwenden

• Filetypen: Drei Kategorien

• Sequentielle Files

Page 2: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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 mit Variablen vom Datentyp File bearbeitet

2/33

Page 3: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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:

• Für das File muss eine 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 dem Betriebssystem bekannten, ev. noch zu kreierenden, Dateinamen in Verbindung gebracht werden

333

Page 4: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Die Elemente eines Files

Filevariable Filekomponente

File: Eine verlängerbare Folgevon Filekomponenten

Positionszeiger der Filevariablen

1 Komponentennummer

4/33

Page 5: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

• Permanente Datenspeicherung

• Deklaration von FilesDeklaration von Files

• Files verwenden

• Filetypen: Drei Kategorien

• Sequentielle Files

Page 6: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Deklaration von Files

Deklaration einer Filevariablen

var

Eingabedaten: file of Integer;

5/33

Name der Filevariablen Basistyp

Ein in Pascal deklarierbarer Typ

Page 7: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Deklaration von Files

Deklaration eines Filetyps

type

Messung =Real;

Messwerte = file of Messung;

6/33

Vom gleichen Typ

Nicht vom gleichen Typ

var

MWDatei_1 : Messwerte;

MWDatei_2 : Messwerte;

MWDatei_3 : file of Messung;

MWDatei_4 : file of Messung;

Page 8: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

• Permanente Datenspeicherung

• Deklaration von Files

• Files verwendenFiles verwenden

• Filetypen: Drei Kategorien

• Sequentielle Files

Page 9: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Zuordnung eines Files zu einer Datei

Mit der Prozedur AssignFile wird der Filevariablen ein (und nur ein) in einer Stringkonstanten oder -variablen angegebener Dateiname zugeordnet.

AssignFile(Eingabedaten,'C:\Messwerte')

 

Name der Filevariablen Verzeichnispfad und Dateiname

7/33

oder:

const

Filename = 'C:\Messwerte';

AssignFile(Eingabedaten, Filename);

Page 10: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Zuordnung eines Files zu einer externen Datei mit OpenDialog

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(Eingabedaten,OpenDialog1.FileName);

8/33

Page 11: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Files zum Lesen oder Schreiben vorbereiten

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

9/33

Page 12: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Öffnen eines Files zum Lesen

Mit der Prozedur Reset wird das File für eine bereits vorhandene Datei geöffnet:

Reset(Eingabedaten);

• 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 Datei mit dem angegebenen Namen vorhanden, dann tritt ein Eingabe/Ausgabe-Fehler auf

10/33

Page 13: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Lesen eines Files

Mit der Prozedur Read wird der Inhalt einer Filekomponente gelesen

var

Messwert: Real;

Eingabedaten: file of Real;

begin

AssignFile(Eingabedaten,'C:\Messwerte')

Reset(Eingabedaten);

Read(Eingabedaten, Messwert);

11/33

Filevariable Variable, in die gelesen wird

Page 14: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Lesen eines Files

Beim Lesen eines Files muss geprüft werden, ob das Ende des Files erreicht wurde

Die Funktion EOF (End Of File) liefert "TRUE" sobald die letzte Filekomponente gelesen wurde

if NOT EOF(Eingabedaten)

then Read(Eingabedaten, Messwert);

12/33

Page 15: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Öffnen eines Files zum Schreiben

Die Prozedur Rewrite erstellt ein neues File und öffnet es anschliessend:

Rewrite(MWDatei_1);

• Mit Rewrite wird ein File darauf vorbereitet, Daten in eine neue Datei unter dem mit AssignFile der Filevariablen (MWDatei_1) zugewiesenen Dateinamen zu schreiben

• Ein bereits offenes File wird zuerst geschlossen und dann erneut geöffnet. Nach dem Öffnen wird der Positionszeiger an den Anfang des Files gesetzt

• Existiert bereits eine gleichnamige Datei, wird deren Inhalt gelöscht und an ihrer Stelle die neue Datei angelegt

13/33

Page 16: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Schreiben eines Files

Mit der Prozedur Write wird eine Filekomponente geschrieben

var

Messwert: Real;

Eingabedaten: file of Real;

begin

AssignFile(Eingabedaten,'C:\Messwerte')

Rewrite(Eingabedaten);

Messwert:= 12.87;

Write(Eingabedaten, Messwert);

14/33

Filevariable Variable, deren Wert geschrieben wird

Page 17: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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 Datei geschrieben werden

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

  AssignFile(Eingabedaten, 'C:\Messwerte');

Reset(Eingabedaten);

{ Datei Messwerte verarbeiten }

CloseFile(Eingabedaten);

AssignFile(Eingabedaten, 'A:\NeueWerte');

Reset(Eingabedaten);

{ Datei NeueWerte verarbeiten }

15/33

Page 18: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Abfangen des Fehlers bei fehlenden Dateien

• Pascal überprüft standardmässig ob Aufrufe von Eingabe-/Ausgabe Prozeduren und -Funktionen zu Problemen geführt haben (E/A-Fehler)

• Beim Auftreten eines solchen Fehlers wird der Programmablauf in der Regel abgebrochen

• Die automatische Fehlerüberprüfung kann mit einer sog. Compiler-Direktive deaktiviert werden: {$I-}

Kommentar Compiler-Direktive Name Parameter

{ $ I - }

16/33

E/A-Fehler können so im eigenen Programm behandelt werden

Page 19: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Abfangen des Fehlers bei fehlenden Dateien

Die Funktion IOResult liefert den Status der letzten E/A-Operation

Dazu muss die automatische E/A-Prüfung mit der Compiler-Direktiven {$I–} deaktiviert werden

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

{$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}

17/33

Page 20: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Zusammenfassung: Dateneingabe

A:\Meindok.txt

ch

Externer Speicher

Arbeitsspeicher

Read(Eingabe,ch);

1

2

3

AssignFile(Eingabe,'A:\Meindok.txt');

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

18/33

Page 21: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Zusammenfassung: Datenausgabe

A:\Meindok.txt

ch

Externer Speicher

ArbeitsspeicherWrite(Ausgabe,ch);

Rewrite(Ausgabe);

1

2

3

Pascal-Anweisungen

Es soll eine Textdatei, Zeichen um Zeichen, ausgeschriebenwerden

19/33

AssignFile(Ausgabe,'A:\Meindok.txt');

Page 22: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

• Permanente Datenspeicherung

• Deklaration von Files

• Files verwenden

• Filetypen: Drei KategorienFiletypen: Drei Kategorien

• Sequentielle Files

Page 23: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Drei Kategorien von Files

Pascal unterscheidet zwischen folgenden Filetypen:

• Typisierte Files

• Untypisierte Files

• Textfiles

20/33

Page 24: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

21/33

Page 25: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Untypisierte Files

Wird bei der Deklaration der Filevariablen kein Basistyp angegeben, dann speichert jede Filekomponente ein Byte

Verwendet für Zugriffe bei denen keine Voraussetzungen für Struktur und Inhalt der entsprechenden Dateien gemacht werden

Beispiel

var

Eingabedaten: file;

22/33

Page 26: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Textfiles

Speichert zeilenweise angeordnete Textzeichen

var

Dokument: Textfile;

• Standardprozeduren und -funktionen:

AssignFile, Reset, Rewrite, Read, Write, CloseFile, EOF

• Read- und Write-Prozeduren erlauben das Lesen und Schreiben von Werten, die nicht den Typ Char haben

• Mit Reset geöffnete Textfiles sind schreibgeschützt

23/33

Page 27: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Textfiles lesen

Jede Zeile in einem Textfile wird mit einem Zeilenende-Zeichen abgeschlossen

Dieses Zeichen muss auch gelesen werden

var

Dokument: Textfile;

Zeile: String;

Zeichen: Char;

begin

AssignFile(Dokument, 'C:\Meintext.txt');

Reset(Dokument);

Read(Dokument, Zeile);

Read(Dokument); {liest End of line}

24/33

Page 28: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Textfiles lesen

Zur Vereinfachung stellt Pascal die Prozedur Readln (für Read Line) zur Verfügung

Statt

Read(Dokument, Zeile);

Read(Dokument);

können wir abgekürzt schreiben

Readln(Dokument, Zeile);

25/33

Page 29: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Textfiles lesen

Die Standardfunktion EOLN (für End Of Line) liefert "TRUE" sobald das nächste zu lesende Zeichen ein Zeilenende-Zeichen ist

Somit können wir Zeilen unbekannter Länge lesen:

while not EOLN(Dokument) do

Read(Dokument, Zeichen);

Read(Dokument); {liest das Zeilenende-Zeichen}

26/33

Page 30: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Textfiles lesen

• Aus Textfiles gelesene Zeichenfolgen, die ganze oder reelle Zahlen darstellen, werden automatisch in die entsprechenden numerischen Werte vom Typ Integer oder Real konvertiert

• Entspricht die Zahl nicht dem erwarteten Format, tritt ein E/A-Fehler auf

var

Dokument: Textfile;

Wert_1, Wert_2: Integer;

begin

Read(Dokument, Wert_1, Wert_2);

27/33

Page 31: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Textfiles schreiben

• Akzeptiert werden Werte vom Typ Char, String, Boolean, einem Integer-Typ oder einem Real-Typ (automatische Konvertierung)

var

Dokument: Textfile;

Zeile: String; Wert: Real;

begin

Rewrite(Dokument);

Zeile:= 'ETH Zuerich');

Write(Dokument, Zeile);

Writeln;

Wert:= 37.85;

Writeln(Dokument, Wert);

28/33

Page 32: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Text anfü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(Dokument);

• Die Textfilevariable (Dokument) muss mit AssignFile einer Datei zugeordnet worden sein

• Der Positionszeiger wird auf das Fileende gesetzt

• Im Gegensatz zu Rewrite wird mit Append der Inhalt einer bestehenden Datei nicht gelöscht

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

29/33

Page 33: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

Text anfügen

var

Dokument: Textfile;

Zeile: String;

Leitzahl: Integer;

begin

Append(Dokument);

Zeile:= 'ETH ';

Leitzahl:= 8092;

Writeln(Dokument,Zeile,Leitzahl,' Zuerich');

30/33

Page 34: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

• Permanente Datenspeicherung

• Lesen und schreiben in Pascal

• Filetypen: Drei Kategorien

• Arbeiten mit Files

• Sequentielle FilesSequentielle Files

Page 35: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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!

31/33

Page 36: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

32/33

Page 37: Agenda für heute, 1. Juni, 2006 Permanente DatenspeicherungPermanente Datenspeicherung Deklaration von Files Files verwenden Filetypen: Drei Kategorien.

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

EOF(F) = true

33/33