wie in C/C++ eine "tabellarische" Textdatei erstellen

busenbach

Mitglied
Hallo,
ich bin neu hier und habe eine Frage. Ich habe leider nichts dergleichen im Forum gefunden.

------------------------
Ich habe viele verschiedene Daten (Zahlen, Text) und möchte gerne diese in eine Textdatei reinschreiben. Generell kein Problem, "nacheinander" funktioniert es prima

-->Beispiel wenn ich es Zeile für Zele nacheinander mache:
1 2 3 4
a b c d
1.1 2.2 3.3 4.4


Jetzt aber brauche ich aber die Daten in tabellarischer Form
-->Beispiel für tabellarisch:
1 a 1.1
2 b 2.2
3 c 3.3
4 d 4.4


Man beachte, dass ich nicht alles auf einmal reinschreibe, die Datei muss immer wieder mal geöffnet werden und reingeschrieben werden.
--------meine Proleme---------
**Bei C++ war das generelle Problem, dass wenn ich die Datei frisch öffne der Inhalt auch gleich "sofort" wieder gelöscht ist

ofstream outf("output.txt"); //Datei öffnen
outf<<DATA; //Daten beliebig reinschreiben
outf.close(); //Datei schließen

**Bei C benutze ich "fprintf" und weiss nicht wie ich an das Ende der Zeile springen kann um die aktuellen Daten reinzuschrieben und gleich danach wieder in die neue Zeile runter zu gehen und da das Ende zu erreichen für die nachfolgenden Daten (es soll dabei nichts gelöscht werden)


Hoffe habe mich verständlich ausgedrückt. Kann mir da einer Helfen, wenn möglich mit Beispiel? Wie kann ich in der Textdatei an vorgesehenen Orten springen um neue Daten reinzuschreiben OHNE dabei das bestehende zu löschen!!

mfg
 
also in c würde ich nach dem zeilen ende (suchen indem man eine ziele leist).

dann mit "seek" ein zeichen zurück. (um das zeilen ende zu überschreiben).

und dann mit fprintf normal schreiben.

ich hoffe du woltest einen lösungsansatz haben.

mfg Faller
 
also in c würde ich nach dem zeilen ende (suchen indem man eine ziele leist).

dann mit "seek" ein zeichen zurück. (um das zeilen ende zu überschreiben).

und dann mit fprintf normal schreiben.

ich hoffe du woltest einen lösungsansatz haben.

mfg Faller

naja, ein kleines Anwendungs-Beispiel wäre mir schon lieb:)
Zu diesem seek hatte ich mal was gefunden (http://www.cpp-entwicklung.de/cpplinux3/cpp_main/cpp_mainch3.html) aber ich konnte damit nicht viel anfangen (ist das nicht c++?) Wie wende ich das korrekt an, dass ich am Ende der Zeile bin OHNE das alles davor gelöscht wird!
Das Problem bei mir war, dass dennoch alles schlichtweg gelöscht wurde trotz seek :(
 
also in c würde ich nach dem zeilen ende (suchen indem man eine ziele leist).

dann mit "seek" ein zeichen zurück. (um das zeilen ende zu überschreiben).

und dann mit fprintf normal schreiben.

ich hoffe du woltest einen lösungsansatz haben.

mfg Faller


-->übrigens, danke für die schnelle Antwort, warja RuckiZucki
was auch möglich wäre:
Wie kann ich Schritt für Schritt jedes einzelne Zeichen durchzählen bis ich meine Trennmarkierung erreicht habe (in meinem fall ein TAB-Abstand --> '\t')
Da schlage ich mich grad mit durch.... (vielleicht finde ich ja noch was zu seek)
 
ne, probiere hier schon fast den ganzen Tag wahllos jede mögliche Alternative aus, aber es klappt einfach nicht...
Kann mir jemand helfen Daten tabellarisch ein eine Textdatei einzugeben "ohne" dass die vorher geschriebenen Daten gelöscht werden.


INFO am Rande: Ich gebe immer TYP-weise die Daten ein, z.B.:
A B C ...
A B C ...
A B C ...
erst die A-Daten, dann die B-Daten, dann die C.... usw
es soll immer hintendrann gesetzt werden

mfg
 
Hi.

Die einzige portable Möglichkeit Daten in einer Datei zu ändern, ist die Daten auszulesen, zu ändern und dann die komplette Datei nochmal abzuspeichern.

Lies doch die Datei einfach zeilenweise ein und speichere die Zeilen in einen std::vector. Wenn du nun etwas an eine Zeile anfügen willst geht das ganz einfach. Wenn du fertig bist schreibst du die Daten komplett wieder in die Datei.

Du solltest die Datei allerdings dann im Schreiben+Lesen Modus öffnen:
C++:
fstream datei("xyz.txt", ios::in | ios::out);

Gruß
 
Hi.

Die einzige portable Möglichkeit Daten in einer Datei zu ändern, ist die Daten auszulesen, zu ändern und dann die komplette Datei nochmal abzuspeichern.

Lies doch die Datei einfach zeilenweise ein und speichere die Zeilen in einen std::vector. Wenn du nun etwas an eine Zeile anfügen willst geht das ganz einfach. Wenn du fertig bist schreibst du die Daten komplett wieder in die Datei.

Du solltest die Datei allerdings dann im Schreiben+Lesen Modus öffnen:
C++:
fstream datei("xyz.txt", ios::in | ios::out);

Gruß

ja, das habe ich mittlerweile auch so gesehen, dass ich wohl erst die ganze Zeile einlesen muss, am Ende meine neuen Daten dranhänge und dann diese verlängerte Zeile über die Alte drüberschreibe. Dann gehts mit der nächsten Zeile weiter...

->Bei C++ habe ich das Problem, dass sofort "ALLES" weg ist sobald ich auch nur die Datei öffne.
->Bei C schaff ich die Kopiervporgänge nicht

Was ich auch absolut nicht geschafft hatte war Daten "dranzuhängen", ich hatte alles in einem char-Array drin und weiss nicht wie ich da was hintendran tun kann.

Was hast du mit "std::vector" gemeint? wie geht man da vor?
mfg
 
ja, das habe ich mittlerweile auch so gesehen, dass ich wohl erst die ganze Zeile einlesen muss, am Ende meine neuen Daten dranhänge und dann diese verlängerte Zeile über die Alte drüberschreibe. Dann gehts mit der nächsten Zeile weiter...
Das geht so nicht. Du kannst nicht einfach mitten in einer Datei irgendwelche Daten einfügen - du kannst so höchstens Zeichen überschreiben, aber die Anzahl der Zeichen in der Datei wird sich nicht ändern, es sei denn du schreibst an das Ende der Datei noch etwas dran.

->Bei C++ habe ich das Problem, dass sofort "ALLES" weg ist sobald ich auch nur die Datei öffne.
Ja, das ist ganz normal wenn du einen ofstream benutzt. Dabei wird die Datei im "truncate" Modus geöffnet - d.h. sie wird erstellt wenn sie noch nicht existiert - falls sie bereits existiert wird die Größe der Datei auf 0 Byte gesetzt.
Was hast du mit "std::vector" gemeint? wie geht man da vor?
Man liest alle Zeilen (:suchen: "zeilenweise einlesen") in einen std::vector mit Hilfe der push_back Methode ein, und modifiziert dann die Zeilen im vector (am einfachsten womögilch mit einem std::ostringstream) und schreibt dann die Daten komplett wieder in die Datei.

Gruß
 
Versuche einfach mit fopen und fclose zu arbeiten. Bei fopen kannst Du kannst du den Mode a für append verwenden. Ich hoffe das hilft Dir weiter
 
Versuche einfach mit fopen und fclose zu arbeiten. Bei fopen kannst Du kannst du den Mode a für append verwenden. Ich hoffe das hilft Dir weiter
Nein, das hilft ihm nicht weiter. Wenn du das Thema aufmerksam verfolgt hättest, wüßtest du, dass er keine Daten an die Datei anhängen möchte, sondern Daten an einer beliebigen Stelle in der Datei einfügen will. In C++ kann man genauso eine Datei im "append" Modus öffnen wie in C - das führt doch aber zu nichts. Es macht keinen Unterschied ob man nun C oder C++ verwendet. In C++ ist nur die Verwaltung der Daten durch die Standard-Klassen deutlich einfacher als mit C.

Gruß
 
Zurück