Thomas Schmieder: Textdatei - bestimmte Zeile überschreiben?

Beitrag lesen

Hallöle,

da stand doch immer noch der Senftopf rum...

Natürlich kann man in einer als Textdatei organisierten (nicht unbedingt in einer als Textdatei geöffneten) Datei eine einzelne Zeile überschreiben. Generell muss man sie dazu im Binärmode und/oder in wahlfreiem Zugriff öffnen.

Nun gibt es je nach Betriebssystem und verwendeter Programmiersprache verschiedene Funktionen, die das zeilenweise Lesen trotzdem unterstützen, oder es gibt sie eben nicht. C regelt das alles durch eine eigene Implementierung. Die Datei wird von den in C vorhandenen Routinen also immer im "Binärmodus" des Betriebssystemes geöffnet. Ich kann nun diese Datei mit den Dateifunktionen für Textdateien lesen lassen, Zeile für Zeile. Ich merke mir bei jeder Zeile die Position des Dateizeigers, BEVOR ich die Zeile lese. Außerdem merke ich mir die Länge der gelesenen Zeile. Dafür brauche ich nur zwei Variablen, die ich immer wieder überschreiben kann. Wenn die passende Zeile gefunden wurde, kann ich die Zeile in gleicher Länge durch eine neue ersetzen, indem ich den Dateizeiger auf die Startposition der Zeile setze (habe ich mir ja gemerkt) und die geänderte Zeile GLEICHER Länge zurückschreibe. Ich kann sogar aus einer Zeile mehrere machen, indem ich das für das Betriebssystem vorgeschriebene Zeilenendezeichen einfach irgendwo dazwischen stanze. Genauso kann ich aus mehreren Zeilen eine machen, indem ich einfach die Zeilenende-Zeichen gegen neutrale Elemente (z.B. Leerzeichen, NULL, je nach System und Applikation) ersetze.

Wenn man aber z.B. mit einem in Pascal geschriebenen Programm eine Datei im Textmodus auf einem DOS/Windows-System öffnet, dann kann man nicht in die Datei zurückschreiben, da der Pascal-Compiler auf die speziellen Textdatei-Funktionen des Betriebssystems (BIOS, extended BIOS) zurückgreift, und die lassen bei DOS/WIN eben kein Schreiben mitten in als Textdatei geöffnete Dateien zu, nur Anhängen an das Ende oder Überschreiben.

Liebe Grüße aus http://www.braunschweig.de

Tom

--
Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.