Programmiersprache Pascal
Datenströme
Ein Datenstrom (stream) umfaßt Daten, die von einer Quelle zu einem Ziel
fließen und dabei gegebenenfalls ihr Format, nicht jedoch ihren
Bedeutungsgehalt verändern.
Moderne Programmiersprachen erlauben eine einheitliche Behandlung von
Datenströmen, und zwar unabhängig von Quelle und Ziel
(Hauptspeicher, Nutzer-Terminal, lokale Datenspeicher, lokales oder
weltweites Rechnernetz).
In Standard Pascal ist von der Idee des Datenstromes noch wenig zu spüren,
neuere Pascal-Realisierungen greifen die Idee (partiell) auf.
Im Zusammenhang mit Datenströmen werden zwei separate Aufgaben sichtbar:
-
die Kopie von Daten
-
z.B. zur Archivierung bzw. Zwischenspeicherung auf einem externen
Medium oder zur Übertragung von einem Rechner auf einen anderen
im allgemeinen findet hier keine Formatänderung statt
-
z.B. zur Interaktion mit dem Nutzer oder zur Präsentation von
Ergebnissen
oft ist dazu eine Transformation von dem rechnerinternen Format
in das Textformat erforderlich
-
die Konvertierung von Daten
d.h. Wechsel des Datentyps
Beide Aufgaben überschneiden sich in einem Punkt: Für die Arbeit
mit Textdateien ist häufig die Konvertierung von Daten erforderlich
(z.B. Zahl - Zeichenkette).
Die Aufgaben sind jedoch nicht identisch: Zum einen werden Daten ohne
Konvertierung kopiert (binäre Daten), zum anderen gibt es weitere Arten
der Konvertierung (z.B. ganze Zahl - reelle Zahl).
In früheren Programmiersprach(version)en wurden beide Aufgaben getrennt
und nach unterschiedlichen Konzepten gelöst:
-
spezielle Sprachmittel für die Arbeit mit bestimmten
Speichermedien
Ein Beispiel dafür bieten alte Fortran-Versionen:
PRINT für die Ausgabe auf Drucker, PUNCH für
die Ausgabe auf Lochkarte, READ für die Eingabe von
Lochkarte, WRITE für die Ablage von Daten in Dateien.
-
spezielle Sprachmittel für die Konvertierung Zahl - Zeichenkette und
umgekehrt
z.B. DECODE, ENCODE
Hier hat es inzwischen Verallgemeinerungen gegeben:
-
allgemeine Sprachmittel für die Arbeit mit Dateien
spezielle Ein- und Ausgabegeräte werden behandelt wie Dateien
Dateien, die über ein Rechnernetz angefordert werden, werden so
behandelt wie lokale Dateien
-
Festlegung von Standardeingabe stdin und Standardausgabe
stdout
stdin ist im interaktiven Betrieb der Tastatur zugeordnet und
kann (mit Mitteln des Betriebssystems) auf eine Textdatei oder ein anderes
zeichenbasiertes Eingabemedium (früher oft Lochkarte oder Lochstreifen)
umgelenkt werden
stdout ist im interaktiven Betrieb dem Bildschirm zugeordnet und
kann (mit Mitteln des Betriebssystems) auf eine Textdatei oder ein anderes
zeichenbasiertes Ausgabemedium (z.B. Drucker) umgelenkt werden
-
gleiche oder verwandte Sprachmittel für das Lesen aus Textdateien
bzw. Zeichenketten sowie für das Schreiben in Textdateien bzw.
Zeichenketten (Gemeinsamkeit: Konvertierung)
Zeichenketten werden in diesem Zusammenhang als interne Dateien
bezeichnet.
In Bezug auf die Sprachmittel ist zu unterscheiden:
-
Es gibt spezielle Sprachbefehle (Schlüsselworte).
Beispiel: Fortran.
Neuere Programmiersprachen wählen diesen Weg nicht, da er den
Sprachumfang erhöht und die Entwicklung von Sprachübersetzern
erschwert. Zudem wird die Empfindlichlichkeit der Sprache gegenüber
Veränderungen auf Seiten der Rechentechnik beeinflußt.
-
Es gibt spezielle Unterprogramme.
Die Unterprogramme werden mit den Laufzeitbibliotheken des
Programmiersystems zur Verfügung gestellt.
Diese Unterprogramme sind durch Anwenderprogramme
-
nicht überschreibbar
z.B. Standard Pascal
-
überschreibbar
z.B. einige Pascal-Versionen
Sprachen, bei denen der Umfang des vorgeschriebenen Laufzeitsystems gering
ist, sichern zwar eine hohe Flexibilität, verführen die Entwickler
von Programmiersystemen aber nicht selten dazu, eigene Erweiterungen
vorzunehmen.
Werden diese Erweiterungen von den Programmierern unkritisch genutzt,
so ergeben sich oft Probleme bei der Portabilität der entwickelten
Programme.
Dieses Problem ist auch bei Pascal und den Nachfolgesprachen Modula und
Oberon zu beachten, da der Sprachschöpfer N. Wirth bewußt Wert
auf die Kompaktheit seiner Sprachen gelegt hat.
Besonders Turbo Pascal und das darauf beruhende Delphi besitzen eine
Vielzahl von nicht portablen Erweiterungen !
Dateien
Bei der Arbeit mit Dateien ist zu unterscheiden:
Ablageformat
-
binäre Dateien
Daten werden so abgelegt, wie sie rechnerintern gespeichert werden
Vorteil: keine Konvertierung, (einfache) Verschlüsselung bei
Daten, die rechnerintern nicht als Zeichenfolge vorliegen
Nachteil: Manuelle Auswertung ist nur sehr eingeschränkt
möglich, dies erschwert z.B. Tests
Unterschieden werden können
-
typisierte binäre Dateien
die Datei besteht aus Datensätzen mit gleicher Länge und einer
festen Struktur
jeder Datensatz läßt als Wert eines - skalaren oder
aggregierten - Datentyps auffassen, dem eine bestimmte Bedeutung zukommt
-
untypisierte binäre Dateien
die Datei besitzt - aus Sicht des Pascal-Programms - keine Struktur
es werden rein formal Datensätze mit fester Länge gebildet,
die Daten innerhalb eines Datensatzes haben im allgemeinen keine
inhaltliche Bindung
-
Textdateien
alle Daten werden im Textformat abgelegt
Vorteil: Manuelle Auswertung einfach
Nachteil: Textdateien sind meist länger als Binärdateien mit
bedeutungsgleichem Inhalt
Bemerkung:
Werden ausschließlich Daten abgelegt, die rechnerintern
als Zeichen bzw. Zeichenkette vorliegen, so sind - je nach Implementierung -
Binär- und Textdatei entweder identisch oder zumindest sehr
ähnlich aufgebaut.
Zugriffsart
-
sequentieller Zugriff
Daten können ausschließlich in der Reihenfolge
- gelesen werden, in der sie gespeichert sind,
- geschrieben werden, in der sie gespeichert werden
Vorteil: Daten können unstrukturiert sein
Nachteil: lange Zugriffszeiten, wenn bei großen Dateien
ausgewählte Daten in wechselnder Reihenfolge gelesen werden
müssen
-
Direktzugriff
Daten können in anderer Reihenfolge gelesen oder geschrieben werden
als sie gespeichert sind
Vorteil: kürzere Zugriffszeiten
Nachteil: Daten müssen strukturiert sein
-
index-sequentieller Zugriff
Zugriffsrecht
-
Lesen
-
Schreiben - Überschreiben (rewrite)
-
Schreiben - Anfügen (append)
Bemerkung: Ein Einfügen ist beim Schreiben nicht unmittelbar möglich,
die Datei muß dafür neu aufgebaut werden.
Folgezustand
-
Datei bleibt erhalten
-
Datei wird gelöscht
Programmiersprachen stellen zur Arbeit mit Dateien im allgemeinen folgende
Operationen bereit:
-
Deklaration einer Dateivariablen
Dateien werden bei Ein- und Ausgabeoperationen nie mit ihrem Namen
angesprochen, sondern stets unter Vermittlung der Dateivariablen
(nicht in allen Sprachen handelt es sich dabei im syntaktischen Sinn
um Variablen)
-
Bindung der Dateivariablen an einen Dateinamen
-
Eröffnung der Datei
löst im allgemeinen eine Aktivität des Betriebssystems aus
-
Setzen des Positionszeigers
Festlegung der Position innerhalb der Datei, ab der gelesen bzw.
geschrieben werden soll
-
Abfrage des Positionszeigers
-
Abfrage von Dateiattributen
Informationen über die Datei einholen, die aktuell an eine
Dateivariable gebunden ist (Name, Zugriffsart, Zugriffsrecht, usw.
-
Lesen
ab Position des Positionszeigers
-
Schreiben
ab Position des Positionszeigers
-
Schließen der Datei
löst im allgemeinen eine Aktivität des Betriebssystems aus
Häufig löst eine Anweisung mehrere Operationen aus, teils explizit,
teils implizit (Nebeneffekt).
P. Böhme, 02.09.1995