Seite 1 von 1

Überzählige Zeichen löschen in einer Datei mit C

Verfasst: Sa Jul 02, 2016 11:59 am
von Orioner
Ich wollte kürzlich mit C Text in eine Datei schreiben und dabei den Text einer Zeile in dieser Datei ersetzen/überschreiben. Dabei bin ich auf ein Problem gestoßen: Egal in welchem Modus oder auf welche Art ich in die Datei schreibe, ist die zu überschreibende Zeile länger als die neue, zu speichernde, bleibt der längere, überstehende Abschnitt des (alten) Textes erhalten und ergänzt den neuen, kürzeren Text. Die (überzähligen) Buchstaben der älteren Zeile sollen aber gelöscht/entfernt werden. Wie erreiche ich das?

Beispiel:
Dies ist ein langer, langer, langer Text in einer Zeile.
Diese ist kein kurzer Text.

Die obere, lange Zeile soll durch die untere, kurze Zeile ersetzt werden. Da die untere Zeile nur 27 Zeichen lang ist, bleiben die letzten 29 Zeichen der alten Zeile stehen, sodass der gespeichert Text in dieser Zeile nun so lautet:

Diese ist kein kurzer Text., langer Text in einer Zeile.

Wie erreiche ich also, dass die übrigbleibenden Zeichen des alten Textes gelöscht werden? Wie kann ich überhaupt löschen, in einer Datei, ohne die komplette Datei zu ersetzen/überschreiben?

Re: Überzählige Zeichen löschen in einer Datei mit C

Verfasst: Sa Jul 02, 2016 12:09 pm
von cloidnerux
Wie erreiche ich also, dass die übrigbleibenden Zeichen des alten Textes gelöscht werden? Wie kann ich überhaupt löschen, in einer Datei, ohne die komplette Datei zu ersetzen/überschreiben?
Du bestimmtdie Länge der Zeile bis zum Zeilenumbruch(\n), schreibst dann deinen neuen Text, checkst ob noch Zeichen vom alten übrig sind, und wenn ja, löschst du diese. Dafür musst du wrsl den kompletten restlichen Text hinter deinen eingefügten kopieren.

Re: Überzählige Zeichen löschen in einer Datei mit C

Verfasst: Mo Jul 04, 2016 9:08 pm
von Orioner
Danke für den Tipp, aber was heißt wrsl?

Re: Überzählige Zeichen löschen in einer Datei mit C

Verfasst: Di Jul 05, 2016 9:04 am
von Xin
Orioner hat geschrieben:Danke für den Tipp, aber was heißt wrsl?
"Wahrscheinlich".
In normalen Textdateien, wo Texte am Stück hintereinander stehen, ist das aber nicht nur wahrscheinlich, sondern garantiert.
Der Vorteil einer einfachen Testdatei ist ja, dass sie so einfach ist.
Dateiformate, die Daten fragmentieren können, sind entsprechend aufwendiger und daher gerade bei so kleinen Daten wie Text nicht üblich.

Re: Überzählige Zeichen löschen in einer Datei mit C

Verfasst: Do Jul 07, 2016 5:54 pm
von Orioner
cloidnerux hat geschrieben:Du bestimmtdie Länge der Zeile bis zum Zeilenumbruch(\n), schreibst dann deinen neuen Text, checkst ob noch Zeichen vom alten übrig sind, und wenn ja, löschst du diese.
Ich muss noch einmal ganz blöd fragen: Wie mache ich denn dieses Löschen? (Dieser Aspekt war eigentlich der Kern meiner Frage.)

Re: Überzählige Zeichen löschen in einer Datei mit C

Verfasst: Do Jul 07, 2016 6:42 pm
von Xin
Orioner hat geschrieben:
cloidnerux hat geschrieben:Du bestimmtdie Länge der Zeile bis zum Zeilenumbruch(\n), schreibst dann deinen neuen Text, checkst ob noch Zeichen vom alten übrig sind, und wenn ja, löschst du diese.
Ich muss noch einmal ganz blöd fragen: Wie mache ich denn dieses Löschen? (Dieser Aspekt war eigentlich der Kern meiner Frage.)
Dein Test heißt
"ABCDEFGHI1234567"

Nun möchst Du EFGHI mit XXX überschreiben:
"ABCDXXXHI1234567"

XXX reicht nicht, um HI zu überschreiben, also musst Du den Text, denn Du behalten willst, nach vorne kopieren:
"ABCDXXX123456767"

Deine Datei ist nun länger, als sie sein soll.
Anschließend kürzt du die Datei mit truncate() oder chsize():
"ABCDXXX1234567"

Ist XXX länger als das zu überschreibende, musst Du entsprechend erst Platz schaffen, sonst überschreibst Du den nachstehenden Text.
Ein Text-File ist wie ein Array: Handarbeit.

Re: Überzählige Zeichen löschen in einer Datei mit C

Verfasst: Sa Jul 09, 2016 10:42 pm
von Orioner
Xin hat geschrieben:Anschließend kürzt du die Datei mit truncate() oder chsize():
Danke! Das wollte ich wissen! Ich wusste mir nicht anders zu helfen, als diese Frage in einem Programmierforum zu stellen. Ich hoffe, damit komme ich jetzt weiter. Vielen Dank nochmal. :)

Re: Überzählige Zeichen löschen in einer Datei mit C

Verfasst: So Jul 10, 2016 12:11 am
von Xin
Orioner hat geschrieben:Ich wusste mir nicht anders zu helfen, als diese Frage in einem Programmierforum zu stellen.
Diese Programmiererforen sind dafür da, dass sich Programmierer darin treffen und gegenseitig helfen. ^^
Man kann schließlich nicht alles wissen - vor allem nicht vom ersten Tag an.

Re: Überzählige Zeichen löschen in einer Datei mit C

Verfasst: Mo Jul 11, 2016 9:37 am
von Orioner
Wie ich feststellen musste klappt es mit truncate() oder chsize() leider doch nicht. Jedenfalls nicht unter Windows ohne große Trickserei. Man braucht in beiden Fällen eine Include-Datei die es für Windows offiziell nicht gibt. Dann werde ich es jetzt ganz anders machen: Ich wollte eigentlich immer nur die jeweils veränderte Zeile neu schreiben. Aber nun werde ich immer die ganze Datei neu schreiben. Das geht auch.

Re: Überzählige Zeichen löschen in einer Datei mit C

Verfasst: Mo Jul 11, 2016 11:15 am
von Xin
Orioner hat geschrieben:Wie ich feststellen musste klappt es mit truncate() oder chsize() leider doch nicht. Jedenfalls nicht unter Windows ohne große Trickserei. Man braucht in beiden Fällen eine Include-Datei die es für Windows offiziell nicht gibt. Dann werde ich es jetzt ganz anders machen: Ich wollte eigentlich immer nur die jeweils veränderte Zeile neu schreiben. Aber nun werde ich immer die ganze Datei neu schreiben. Das geht auch.
Hier gibt es keine portable Lösung.

Für Windows:
_chsize()