Lesen aus einer Datei |
- Laden des Zeigers
- Testen, ob dieser den Wert 128 hat
- Wenn ja, dann -
- Zeiger auf 0 setzen
- Nächsten Rekord der Datei lesen
- Zeiger zur Rekordadresse addieren
- Byte aus dieser Adress-Kombination laden
- Zeiger um 1 erhöhen
| |
Nach dem erfolgreichen Öffnen der Datei muss der Zeiger auf den Wert 128 gesetzt werden, womit vor dem Lesen des ersten Zeichens ein Lesen des ersten Rekords erzwungen wird.
Nicht aufgeführt ist hier die Überprüfung des Dateiendes.
Dieses ist bei einer binären Datei das physikalische Ende der Datei, bei einer Textdatei das Zeichen für End of File" (0x1AH , ^Z ).
|
Beispiel zum Lesen aus einer beliebigen Datei |
|
Beispiel zum Lesen aus einer Textdatei |
Schreiben in eine Datei |
- Zeiger zur Rekordadresse addieren
- Byte in diese Adress-Kombination speichern
- Zeiger um 1 erhöhen
- Testen, ob Zeiger den Wert 128 hat
- Wenn ja, dann -
- Zeiger auf 0 setzen
- Diesen Rekord in die Datei schreiben
| |
Nach dem erfolgreichen Anlegen der Datei muss der Zeiger auf den Wert 0 gesetzt werden, womit ein leerer Rekord angezeigt wird.
Soll eine Textdatei geschlossen werde, so muss der reguläre Text mit End of File" (0x1AH , ^Z ) beendet werden.
|
Beispiel zum Schreiben in eine beliebige Datei |
|
Beispiel zum Beenden einer beliebigen Datei |
ftell | | fseek |
| |
|
Diese Funktion ermittelt die Position eines Bytes innerhalb einer sequentiellen Datei.
| |
Diese Funktion stellt die Position eines Bytes innerhalb einer sequentiellen Datei wieder her.
|
- Ermitteln der Rekordnummer
- Rekordnummer -1 setzen
- Im Lesepuffer nach dem Wert
0x1AH suchen
- Diesen Wert als Zeiger setzen
- Zeiger und Rekordnummer sind das Resultat
| |
- Zeiger setzen
- Rekordnummer setzen
- Diesen Random Rekord lesen
|
(In den Beispielen wird der Zeiger nicht bearbeitet.)
|
Beispiel zum Ermitteln der Dateiposition |
|
Beispiel zum Einstellen der Dateiposition |
Eine andere Möglichkeit zur Festlegung der Dateiposition ohne die Rekordnummer lässt sich wie folgt durchführen (hier ohne die Ermittlung des Zeigers):
|
ftell alternativ | | fseek alternativ |
- Ermitteln des aktuellen Rekords
- Ermitteln des aktuellen Extents
- Rekord -1 setzen
- Falls Rekord < 0:
- Rekord auf 0x80 setzen
- Extent -1 setzen
- Extent und Rekord sind das Resultat
| |
- Rekord setzen
- Extent setzen
- Datei mit diesen Werten öffnen
- Sequentiellen Rekord lesen
|
Beispiel zum Ermitteln der Dateiposition |
|
Beispiel zum Einstellen der Dateiposition |
Methode 1 | Methode 2 | Methode 3 |
- Speicheradresse laden
- Search_for_first(FCB)
- Wenn Resultat=255 dann keine Datei gefunden
- Gefundenen Dateinamen abspeichern
- Search_for_next
- Wenn Resultat<>255 dann weiter bei 4
- (Optional Dateinamen sortieren)
- Speicheradresse laden
- Nächsten Dateinamen laden
- (Dateioperation durchführen)
- Wenn mehr Dateien vorhanden, dann weiter bei 9
|
- intern_FCB=FCB
- FCB_Maske=FCB
- Search_for_first(intern_FCB)
- Wenn Resultat=255 dann keine Datei gefunden
- Such_FCB=gefundene_FCB
- intern_FCB=gefundene_FCB
- (Dateioperation durchführen)
- intern_FCB=Such_FCB
- Search_for_first(intern_FCB)
- intern_FCB=FCB_Maske
- Search_for_next
- Wenn Resultat<>255, dann weiter bei 5
|
- Search_for_first(FCB)
- Wenn Resultat=255 dann keine Datei gefunden
- Wenn Resultat=255 dann Ende
- gefundene_FCB abspeichern
- Werte aus SCB abspeichern
- (Dateioperation durchführen)
- Werte in SCB zurückschreiben
- Wenn gefundene_FCB im SCB, dann gefundene_FCB in SCB kopieren
- Search_for_next
- Weiter bei 3
|
(In den Beispielen werden nur die Routinen zum Suchen dargestellt.)
|
Beispiel |
Beispiel |
Beispiel |