Aus einen float array soll ein string werden, bei dem die Zahlen mit einem "," voneinander getrennt sind ...
-
@DocShoe Ichhabe einiges ausprobiert, es funktioniert aber nicht.
Mir fehlt nur der Schritt vom float array oder vector zur zeilenweisen Ausgabe in eine Datei wie folgt:
2.12, 3.23, 5.44, 6.77 etc.\n
34.22, 90.21, etc.\n
etc.\n
EOFDas array wird nach jeder Ausgabe neu gefüllt, so entstehen die neuen Zeilen.
So erzeuge ich das File Handle:
FileHandle = CreateFile(L"G:\OpenData.txt", GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
for (const auto& e : vector_of_floats) { FileHandle << e << ","; }
Wird nicht kompiliert: illegal, left operand has type 'HANDLE
Außerdem würde dann nach dem letzten float auch noch ein Komma stehen, was nicht sein soll.
-
@Swordfish Ja, das ist wahrscheinlich die bessere Lösung. Die Größe des Arrays wird erst zur Laufzeit bekannt.
-
@coder123
Vielleicht hab ich irgendwas falsch verstanden, aber warum kannst Du die Zahlen nicht einfach mitofstream outdat("ausgabedatei.txt"); outdat << ...
schreiben?
-
Die Funktionen der WINAPI und der STL sind nicht kompatibel zueinander. Entweder du benutzt
WriteFile
und formatierst deine Werte als Text oder du benutztstd::ofstream
.std::ofstream
ist insofern einfacher, weil er die Konvertierung vonfloat
nach Text automatisch macht, beiWriteFile
musst du dich da selbst drum kümmern.
Und was die Ausgabe angeht: Lauf über alle Werte und schreib ab dem 2. Wert ein Komma davor.for( size_t i = 0; i < vector_of_floats.size(); ++i ) { if( i > 0 ) // schreib Komma // schreib Zahl } for( auto i = vector_of_floats.begin(); i != vector_of_floats.end(); ++i ) { if( i != vector_floats.begin() ) // Schreib Komma // schreib Zahl }
-
@coder123 sagte in Aus einen float array soll ein string werden, bei dem die Zahlen mit einem "," voneinander getrennt sind ...:
Außerdem würde dann nach dem letzten float auch noch ein Komma stehen, was nicht sein soll.
Du kannst das Komma auch vor die Zahl schreiben, es ei denn es ist die erste Zahl.
if (index == 0) FileHandle << e ; else FileHandle << "," << e ;
Wobei ein Tabulator für Excel besser wäre, zumal es dann weniger Probleme mit dem Dezimalkomma gibt. Ein ';' wäre auch ok.
Das C in CSV steht durchaus für Charakter (was auch ein Comma sein kann)
-
@DocShoe sagte in Aus einen float array soll ein string werden, bei dem die Zahlen mit einem "," voneinander getrennt sind ...:
for( size_t i = 0; i < vector_of_floats.size(); ++i ) { if( i > 0 ) // schreib Komma // schreib Zahl } for( auto i = vector_of_floats.begin(); i != vector_of_floats.end(); ++i ) { if( i != vector_floats.begin() ) // Schreib Komma // schreib Zahl }
for (auto const& val : vector_of_floats) { if (&val != &vector_of_floats.front()) { // Schreib Komma } // Schreib Zahl }
-
@hustbaer
Tjo, geht auch, find ich aber nicht schön. Und wenn du das & vergessen hättest würd´s übersetzen und nicht funktionieren. Einfach zu fixen, aber eben möglich.
-
@DocShoe sagte in Aus einen float array soll ein string werden, bei dem die Zahlen mit einem "," voneinander getrennt sind ...:
Tjo, geht auch, find ich aber nicht schön.
Dann versteck das hinter einem ?: Operator.
Ist genauso, sieht nur intelligenter aus.
-
Hm...
Ich hätte wohl eher sowas geschrieben wieauto it = begin(vector_of_floats); if (it != end(vector_of_floats)) { schreib *it; while (++it != end(vector_of_floats)) schreib separator und *it; }
-
@DocShoe sagte in Aus einen float array soll ein string werden, bei dem die Zahlen mit einem "," voneinander getrennt sind ...:
@hustbaer
Tjo, geht auch, find ich aber nicht schön. Und wenn du das & vergessen hättest würd´s übersetzen und nicht funktionieren. Einfach zu fixen, aber eben möglich.Ja, ich weiss. Bei kopierbaren Dingen bin ich da auch nicht 100% glücklich drüber. Bei nicht kopierbarem Zeugs mach ich das aber auf jeden Fall so.
Andrerseits, so lange es nur um ein "," zu viel geht...
Wenns wichtig ist, sollte es Tests dafür geben. Und wenn's nicht wichtig ist, dann ... ist's nicht so wichtig