Werte untereinander in Datei schreiben
-
Hallo alle zusammen,
ich hab ein kleines problem beim schreiben von werten in eine datei:
#include <iostream> #include <string> #include <stdio.h> int main(void) { //noch andere code string cstring; double Messwert[5][3]; // anderer code ofstream DateiWrite; string dateischreiben ="test.txt"; DateiWrite.open(dateischreiben.c_str(), ios::out); for(i = 0; i < 5 ; i++) { sprintf(cstring, "%f", Messwert[i][0]); DateiWrite.write(cstring, sizeof(cstring)); DateiWrite.seekp(1, ios::cur); } DateiWrite.close(); return 0; }
So kann ich die Werte hintereinander mit "Leerzeichen" in die Datei schreiben.
Wie kann ich es denn anstellen das er mir jeden Werte untereinander in die Datei schreibt? Kann man da irgendwas an der seekp() Funktion schrauben ;)?grüße von
einem newbie
-
Erstmal solltest du das Gespiele mit seekp() ganz vergessen. Und zweitens ist es nicht notwendig, deine Ausgaben mit sprintf() aufzubereiten, so intelligent sind die Streams schon von sich aus:
for(i = 0; i < 5 ; i++) { DateiWrite<<Messwert[i][0]<<endl; }
-
wenn du die einfach jeweils in einer zeile haben willst:
for(i = 0; i < 5 ; i++) { DateiWrite << Messwert[i][0] << endl; }
wie du siehst, ist die konvertierung mittels sprintf nicht nötig.
oder wolltest du die in eine spalte links oder rechts binden?
-
Also erstma danke für die Antworten!
Habs gleichmal probiert, doch untereinander stehn die immer noch nicht!
vieleicht hätt ich etwas weiter ausholen müssenalso in Messwert[i][0] sind x werte, in Messwert[i][1] y werte und in Messwert[i][2] z werte gespeichert.
Das File soll dann also wie folgt aussehen:xWert0 yWert0 zWert0
xWert1 yWert1 zWert1
usw....Habs jetzt so gemacht:
DateiWrite << Messwert[i][0] << " " << Messwert[i][1] << " " << Messwert[i][2] << endl;
Das geht zwar aber die stehen dann in der form im file
xWert0 ywert0 zWert0[]xWert1 yWert1 zWert1[]usw...
das ist mir etwas zu unübersichtlich und ich will diese werte dann als koordinaten in nen 3d-programm verwenden, dafür wär die erste formatierung vorteilhaft.
-
so sollte das funktionieren:
DateiWrite.setPrecision(7); for(i = 0; i < 5 ; i++) { DateiWrite.width(8); DateiWrite << Messwert[i][0] << " "; DateiWrite.width(8); DateiWrite << Messwert[i][0] << " "; DateiWrite.width(8); DateiWrite << Messwert[i][0] << " " << endl; }
width legt die anzahl an zeichen fest, die pro wert minmal geschrieben werden sollen, bei allem, was kürzer ist, werde führende leerzeichen angefügt.
das setPrecision legt fest, dass das system versuchen soll, doch bitte nicht mehr als 7 zeichen für eine fließkommazahl zu brauchen. wenn du allerdings mehr als 7 vorkommastellen hast, kann es auch nichts machen.das mit der 8 und der 7 muss nicht sinnvoll sein. probiere ein bisschen aus, bis du die für dich passenden werte gefunden hast oder mach erst einen durchlauf über alle zahlen und schau nach, wie groß das sein muss.
EDIT murks: man muss width natürlich für jeden wert angeben...
-
ghorst schrieb:
so sollte das funktionieren:
DateiWrite.width(8) DateiWrite.setPrecision(7) for(i = 0; i < 5 ; i++) DateiWrite << Messwert[i][0] << Messwert[i][1] << Messwert[i][2] << endl;
width legt die anzahl an zeichen fest, die pro wert minmal geschrieben werden sollen, bei allem, was kürzer ist, werde führende leerzeichen angefügt.
Allerdings mußt du den Wert bei jeder Ausgabe neu angeben, weil er danach wieder zurückgesetzt wird:
Dateiwrite<<setw(8)<<Messwert[i][0]<<setw(8)<<Messwert[i][1]<<setw(8)<<Messwert[i][2]<<endl;
(btw, wenn du wirklich alle Werte in einer Zeile hast, dann stimmt wohl etwas mit dem Textmodus nicht (endl gibt ein NewLine-Zeichen aus, das passend für dein System umgewandelt werden sollte - unter Windows also die Kombination \r\n))
-
Guten Morgen,
vielen dank nochmal für eure Hilfe. Mit
endl
funktioniert es leider irgendwie nicht, aber mit
"\r\n"
klappt alles Prima
einen schönen Tag wünsch ich und bis zum nächsten Problem