Benutzung von tellp und seekp
-
Kann mir jemand verraten wie ich diese beiden Methoden anwenden kann.
Ich schreibe in meinem Programm eine Ausgabedatei, wobei ich am Anfang der Datei Ergebnisse eintragen muss, die ich erst erhalte, wenn ich die Datei abgearbeitet habe.
Wie kann ich vorgehen um die erhaltenen Ergebnisse in einer bestehenden Datei einzutragen. Es muss die Stelle gesucht werden, wo die Information hingehört und auch eingetragen werde.
Bsp.:
string filename; int dimension; streampos pos; //filename wird bearbeitet... ... ofstream myStr(filename.c_str()); //myStr wird geschrieben... //und dimension ermittelt //Anschließend wird die Stelle "DIMENSION :" gesucht //und der Wert dimension hinter ":" geschrieben myStr.seekg(pos,std::ios::beg); //weiss aber schon nicht wie ich das genau //machen soll.wie muss ich dabei seekp und tellp benutzen?
-
Ich sehe hier einen Designfehler, wieso kannst du den Dimension-Wert nicht schon vorher bestimmen? Die Daten sind ja alle schon fix und fertig verarbeitet, es geht ja nur noch um das Rausschreiben.

MfG SideWinder
-
Sry meine Erklärung ist unvollständig.
Das ist so, ich lese aus einer Eingabedatei und schreibe parallel dazu in meine Ausgabedatei.
Die Dimension aber erhalte ich nachdem ich alle Daten abgearbeitet habe und einen Zähler mitgezählt hat, wie groß die Dimension ist.Nachdem also die Eingabedatei abgearbeitet ist habe ich alle nötigen Information und ich muss in meiner Ausgabedatei nochmal ganz an den Anfang und in den Header Dimension eintragen.
-
Wenn du die Position von "DIMENSION : " nicht kennst musst du dich ncohmal auf die Suche machen. Also aus dem ofstream einen iofstream machen, Lese-Pointer an den Beginn stellen, String suchen, Schreib-Pointer an Position setzen, schreiben. Wenn du die Position fix kennst: Schreib-Pointer setzen und schreiben.
Trotzdem: Ich finde (wenn die Datei nicht allzugroß ist, und selbst dann gibts Möglichkeiten), man sollte sich an Input -> Process -> Output halten.
MfG SideWinder
-
Danke für die schnellen Antworten
Ich versuche mal diese Punkte abzuarbeiten. Schau bitte mal ob ich richtig liege
string o_filename, i_filename; int dimension; streampos pos; ifstream myStream(i_filename.c_str()); ofstream myStr(o_filename.c_str()); //hier werden die benötigten Daten aus der Eingabedatei i_filename in die //Ausgabedatei o_filename geschrieben myStr.close(); iofstream MyStr(o_filename.c_str()); //gibt es hier eine Methode, um in der Datei nach "DIMENSION :" zu suchen oder //muss ich mit getline() die Stelle manuell suchen? //muss ich seekg oder seekp bzw. tellg oder tellp benutzen? //kannst du mal ein Beispiel geben, wie ichs benutzen muss?Lese-Pointer an den Beginn stellen:
myStr.seekg(pos,std::ios::beg);String suchen, Schreib-Pointer an Position setzen, schreiben.
-
Eigentlich ist die Stelle von "DIMENSION :" immer gleich, wie kann ich die Position
abfragen und in das Programm einbauen?
-
seekg - Setzen des Lese-Pointers
seekp - Setzen des Schreib-Pointers
tellg - Gibt Lese-Pointer-Position zurück
tellp - Gibt Schreib-Pointer-Position zurück- Den String musst du afaik selbst suchen
- Wenn DIMENSION immer an der selben Position steht kannst du ja einfach:out.seekp(FIXE_POSITION,ios::beg); out.write(something);verwenden
MfG SideWinder
-
Danke das hilft mir weiter.
Eine letzte Frage
<Dateianfang>
NAME :
COMMENT :
TYPE :
DIMENSION :
...
<Dateiende>wie gebe ich nun die Fixe Position an?

"DIMENSION :" steht in der 4.ZeileGruss
-
seekp setzt byteweise, nicht zeilenweise.
Stream-Datei-Verwaltung hat keine Highlevel-Random-Access-Funktionen. Wenn das so ist musst du selbst suchen. Die Byte-Anzahl vom Beginn bis zur Position, bzw. von der jetzigen Position bis zur Position bzw. vom Ende bis zur Postion muss fix sein und bekannt sein.
MfG SideWinder
-
Danke dir für die Hilfe
Gruss