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

Algorithmen, Sprachunabhängige Diskussionen zu Konzepten, Programmiersprachen-Design
Antworten
Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

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

Beitrag von Orioner » Sa Jul 02, 2016 11:59 am

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?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

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

Beitrag von cloidnerux » Sa Jul 02, 2016 12:09 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

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

Beitrag von Orioner » Mo Jul 04, 2016 9:08 pm

Danke für den Tipp, aber was heißt wrsl?

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Di Jul 05, 2016 9:04 am

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.
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.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

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

Beitrag von Orioner » Do Jul 07, 2016 5:54 pm

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.)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Do Jul 07, 2016 6:42 pm

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.
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.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

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

Beitrag von Orioner » Sa Jul 09, 2016 10:42 pm

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. :)

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » So Jul 10, 2016 12:11 am

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.
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.

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

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

Beitrag von Orioner » Mo Jul 11, 2016 9:37 am

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8858
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Mo Jul 11, 2016 11:15 am

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()
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.

Antworten