Überzählige Zeichen löschen in einer Datei mit C
Überzählige Zeichen löschen in einer Datei mit C
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?
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?
- cloidnerux
- Moderator
- Beiträge: 3125
- Registriert: Fr Sep 26, 2008 4:37 pm
- Wohnort: Ram (Gibts wirklich)
Re: Überzählige Zeichen löschen in einer Datei mit C
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.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?
Redundanz macht wiederholen unnötig.
quod erat expectandum
quod erat expectandum
Re: Überzählige Zeichen löschen in einer Datei mit C
Danke für den Tipp, aber was heißt wrsl?
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Überzählige Zeichen löschen in einer Datei mit C
"Wahrscheinlich".Orioner hat geschrieben:Danke für den Tipp, aber was heißt wrsl?
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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Überzählige Zeichen löschen in einer Datei mit C
Ich muss noch einmal ganz blöd fragen: Wie mache ich denn dieses Löschen? (Dieser Aspekt war eigentlich der Kern meiner Frage.)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.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Überzählige Zeichen löschen in einer Datei mit C
Dein Test heißtOrioner hat geschrieben:Ich muss noch einmal ganz blöd fragen: Wie mache ich denn dieses Löschen? (Dieser Aspekt war eigentlich der Kern meiner Frage.)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.
"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.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Überzählige Zeichen löschen in einer Datei mit C
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.Xin hat geschrieben:Anschließend kürzt du die Datei mit truncate() oder chsize():

- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Überzählige Zeichen löschen in einer Datei mit C
Diese Programmiererforen sind dafür da, dass sich Programmierer darin treffen und gegenseitig helfen. ^^Orioner hat geschrieben:Ich wusste mir nicht anders zu helfen, als diese Frage in einem Programmierforum zu stellen.
Man kann schließlich nicht alles wissen - vor allem nicht vom ersten Tag an.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Überzählige Zeichen löschen in einer Datei mit C
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.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Überzählige Zeichen löschen in einer Datei mit C
Hier gibt es keine portable Lösung.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.
Für Windows:
_chsize()
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.