C++Builder->"Variabel"-Speichern
-
Wie kann ich es realisieren das mein Program für jeden unterschiedlichen Namen eine neute Textdatei speichert, bisher siehts bei mir so aus..
AnsiString letter=lb_letter->Caption;
AnsiString name=(ed_nname->Text&ed_vname->Text);
fstream f(\\data\"&letter&"\"&name".txt",ios::out|ios::in);Bei z.B. dem Namen: Max Mustermann soll es wiefolgt ablaufen
name=MustermannMax
letter=M
und soll dann gespeichert werden in: ~verzeichniss des programm\*M*\*MustermannMax*.txtWie mach ich das am besten

CompilerFehler: [C++ Fehler] eintrag.cpp(85): E2015 Mehrdeutigkeit zwischen '_fastcall Variant::operator bool() const' und '_fastcall Variant::operator __int64() const'
-
Kannst Du den Code mit Code-Tags posten? (Ist '&' ein Feh&ler o&der e&&in Ko&nve&rtie&&rungsproblem?)
weiterhin:
- Strings mit +-Operator zusammenfügen.
- Unterverzeichnisse anlegen lassen.
-
Hallo
Der &-Operator ist dafür nicht zuständig, sondern der +-Op.
AnsiString letter=lb_letter->Caption; AnsiString name= AnsiString("\\data\\letter\\") + ed_nname->Text + ed_vname->Text + ".txt"; fstream f(name.c_str(),ios::out|ios::in);Und bitte beachten : sfds
bis bald
akari
-
Danke für die schnelle Antwort!
Habs auch gleich ausprobiert, der Compiler zeigt nun keine Fehler mehr an, jedoch wenn ich es probiere läuft es schief
AnsiString letter=lb_letter->Caption; AnsiString name= AnsiString("\\data\\letter\\") + ed_nname->Text + ed_vname->Text + ".txt"; fstream f(name.c_str(),ios::out|ios::in); if (f.good()) for (int i=0;i<=memo_datensatz->Lines->Count-1;i++) f<<memo_datensatz->Lines->Strings[i].c_str()<<endl; else ShowMessage("Fehler"); f.close();Also ich bekomm immer die Meldung fehler.
Aber was stimmt den nun mit dem Stream nicht? Die unterordner hab ich schon angelegt...
Und eine Frage zu Zeile 2 -> erkennt das programm "letter" als variable? oder als text bzw string?
-
Hallo
Ich empfehle dir erstens deinen Code ordentlich einzurücken und zu klammern. Hat zwar keine funktionale Auswirkung, aber sieht doch schon übersichtlicher aus
AnsiString letter=lb_letter->Caption; AnsiString name= AnsiString("\\data\\letter\\") + ed_nname->Text + ed_vname->Text + ".txt"; fstream f(name.c_str(),ios::out); // Brauchst sicher nur out, kein in if (f.good()) { for (int i=0;i<memo_datensatz->Lines->Count;i++) // Ist mit < besser zu lesen als mit <= -1 f<<memo_datensatz->Lines->Strings[i].c_str()<<endl; } else { ShowMessage("Fehler"); } // f.close(); // Brauchst du nicht, macht fstream am Ende selberDer Fehler kommt weil fstream die angegebene Datei nicht öffnen/erstellen kann. Vermutlich weil das angegebene Verzeichnis nicht vorhanden ist.
bis bald
akari
-
Warum überhaupt streams?
Memo1->Lines->SaveToFile() ist einen Blick wert...letter ist eine Variable vom Typ AnsiString.
-
Verzeichnisse müssten alle vorhanden sein denn
in dem ordner wo der builder das projekt speichert, also da wo auch die exe liegt, ist der ordner "data" und in dem sind alle ordner von "A" biz "Z"...
-
Aha, und woher soll das Programm wissen, dass Du die Pfadangabe relativ zum Ausführungspfad der EXE angibst?
Mit DirectoryExists() oder FileExists() kannst Du überprüfen, ob ein bestimmtes Verzeichnis oder eine bestimmte Datei existieren.
[Edit] Und in ed_nname steht auch nur ein einzelner Buchstabe?!?
-
Joe_M. schrieb:
Warum überhaupt streams?
Memo1->Lines->SaveToFile() ist einen Blick wert...letter ist eine Variable vom Typ AnsiString.
Hab es damit mal ausprobiert, dann kam "Datei\data\letter\MustermannMax.txt konnte nicht erstellt werden.
demnach hat das programm "letter" als "letter" angesehen und nicht als "M"
aber hab auch nen ordner namens "letter" in "data"
jetzt versteh ich nicht warum er nicht klapptund ne frage so am rande, was ist der unterschied zwischen string und ansistring?
in der schule lernen wir nur pascal und bin daher in c++ ganz neu und mich da am durchmogelnedit: Und wie verwende ich dieses DirectoryExists() oder FileExists()?
in ed_nname steht der ganze nachname, der einzelne buchstabe steht in lb_letter..
-
AnsiString letter=lb_letter->Caption.SubString(1,1); // nur ersten Buchstaben verwenden AnsiString name= ExtractFilePath(Application->ExeName) + "\\data\\" + letter + "\\" + ed_nname->Text + ed_vname->Text + ".txt";Wenn Du letter als Variable verwenden willst, musst Du letter auch als Variable verwenden. Direkt in einem Stringliteral wird letter natürlich nicht als Variable interpretiert.
-
vielen vielen dank Joe_M.

funktioniert jetzt mit dem savetofile
lass das stream dann jetzt aussen vor
danke für die hilfe!