Dateien mit fortlaufenden Nummern im Dateiname schreiben
-
Hallo zusammen...
Ich habe folgendes Problem, welches sicher nicht schwer zu lösen ist, aber ich komm schon seit gestern nicht drauf.
Ich habe eine for-Schleife, in der bei jedem Durchlauf eine neue Datei geschrieben werden soll.Der genaue Dateiname wird schon zuvor in Abhängigkeit von bestimmten Eingaben festgelegt. Bei jedem Durchlauf soll dann noch die Zahl des Durchlaufs angehängt werden. Am Ende soll das dann mal so ungefähr aussehen (X=Zahl des Durchlaufs)
Parameter1_Parameter2_X.txt
Da der erste Teil ein char-Array ist, hatte ich die Idee, einfach an eine bestimmte Stelle ein Zeichen auszutauschen. So in der Art
char *temp; sprintf(temp,"%d",i); name[8]=*temp
Aber das funktioniert zum einen irgenwie nicht, zum anderen habe ich dann das Problem, dass die Schleife mehr als 9 Durchläufe haben kann
Vielleicht könnt ihr mir ja nen guten Tipp geben
-
wie wärs mit c++?
std::stringstream stream; stream << "Parameter" << i << ".txt"; std::string dateiname = stream.str();
-
Oh... Wieder was gelernt!
Hab bis jetzt kaum/gar nicht mit Strings gearbeitet (bin erst seit wenigen Wochen mit c++ am werkeln).Danke! :xmas2:
-
Mandel schrieb:
char *temp; sprintf(temp,"%d",i); name[8]=*temp
Die klassische C Variante müsste ungefähr so aussehen:
char temp[30]; // unbedingt Speicher allozieren (hier: aufm Stack) // alternativ aufm heap: char* temp = new temp[30]; sprintf( temp, "Parameter%d.txt", i ); // es gehen auch mehrere %i und mehr // Parameter als nur i, die Reihenfolge // ist entscheidend strcpy( name[x], temp ); // name[x] muss auf ausreichend allozierten // Speicher zeigen
Aber die C++ Variante ist aber auf jeden Fall sicherer und eleganter, die C Variante eventuell schneller.
-
the_isz schrieb:
Aber die C++ Variante ist aber auf jeden Fall sicherer und eleganter, die C Variante eventuell schneller.
Das "eventuell schneller" ist für mich kein Argument. Wenn man wirklich so arge Performanceprobleme hat, dass man hier optimieren muss und sich gleichzeitig gut mit den C-Mitteln auskennt, sodass keine Fehler passieren, kann man darüber nachdenken. Vorher nicht...
-
the_isz schrieb:
Aber die C++ Variante ist aber auf jeden Fall sicherer und eleganter, die C Variante eventuell schneller.
Also imho ist die C++ Variante schneller, weil sie nicht geparst werden muss - außerdem kenne ich niemanden, der bei der Ausgabe auf der Konsole einen Performance-Engpass hätte... Aus diesem Grund sind viele Implementierungen auch ein wenig langsamer als sie eigtl sein könnten, aber dafür noch ma sicherer und komfortabler etc...
bb
-
Ein Performanceproblem kann hier nicht vorliegen, denn im Vergleich zu den Dateioperationen dürfte das Zusammenstellen des Dateinamens in beiden Fällen trivial sein.
Übrigens, wenn du char-Frickelei betreibst bevor du std::string kennengelernt hast, würde ich deine C++-Lehrmittel sehr kritisch überprüfen. Das klingt eher nach einem Buch, in dem (mal etwas übertrieben dargestellt) einfach eine Textersetzung von "C " durch "C++ " vorgenommen wurde.
-
Ihr geht ja ab... Erstens hab ich extra eventuell geschrieben, zweitens hab ich kein Maß für die möglicherweise höhere Geschwindigkeit angegeben und drittens ging's in meinem Post mit Sicherheit nicht darum, die Großarteigkeit von C zu preisen, sondern nur darum, dem TE einen Vergleich zu C geben zu können.
Der TE hatte es ja mit klassischen C Funktionen versucht und da wollte ich ihm zeigen, wie es funktionieren kann, wenn man diese denn unbedingt nutzen will. Mein Ziel war es eher, ihm klar zu machen, warum er höchstwahrscheinlich die C++ Funktionen nutzen will...
Naja, wie dem auch sei... Einen schönen Abend wünsche ich noch!
-
Übrigens, wenn du char-Frickelei betreibst bevor du std::string kennengelernt hast, würde ich deine C++-Lehrmittel sehr kritisch überprüfen. Das klingt eher nach einem Buch, in dem (mal etwas übertrieben dargestellt) einfach eine Textersetzung von "C " durch "C++ " vorgenommen wurde.
Ich weiß nicht... Aber die meisten Tutorials und auch das Buch was ich gelesen habe, haben Strings an nicht wirklich verwendet. Aber das ich eventuell an den falschen Stellen gelernt hab ist mir hier schon neulich aufgefallen, als ich festgestellt habe, dass ich noch nix über Bit-Operatoren wusste :xmas1: