Dateieinträge ändern und zurückschreiben
-
Ja, das ist mir schon klar. Habe das Programm gestern nur schnell runtergeschrieben. Hier die Version mit Funktionen, etc.
#include <iostream> #include <fstream> #include <string> using namespace std; struct data { string name; string vorname; string strasse; string ort; long plz; string kuNummer; string kuId; } kunde; void kunde_erstellen() { string line; // Alle Zeichen, abgesehen vom Semikolon hier speichern cout << "Kunde anlegen"<< endl; cout << "Vorname?" << endl; cin >> kunde.vorname; cout << "Name?" << endl; cin >> kunde.name; cout << "Strasse?" << endl; cin >> kunde.strasse; cout << "PLZ?" << endl; cin >> kunde.plz; cout << "Wohnort?" << endl; cin >> kunde.ort; fstream datei("kunde.txt" , ios::out| ios::app); datei << kunde.vorname << ";" << endl; datei << kunde.name << ";"<< endl; datei << kunde.strasse << ";"<< endl; datei << kunde.plz << ";"<< endl; datei << kunde.ort << ";" << endl; datei.close(); } void kunde_aendern () { int auswahl; int i = 0; char c; char buf[100]; cout << "Kundendaten aendern!" << endl; cout << "Bitte geben Sie die Kundennummer ein:" << endl; cin >> kunde.kuNummer; kunde.kuId = kunde.kuNummer + ".txt"; fstream kuFile(kunde.kuId.c_str(), ios::in| ios::out); if (!kuFile) { cout << "Kundendaten nicht vorhanden" << endl << endl; //goto Main Menü } else { //kuFile.open(kunde.kuId.c_str(), ios::in| ios::out); cout << "Datei erfolgreich geoeffnet!"<< endl; cout << "Was moechten Sie aendern?" << endl; cout << "(0) Vorname, (1) Name, (2) Strasse, (3) PLZ, (4) Wohnort" << endl; cin >> auswahl; kuFile.seekg(auswahl); kuFile.getline(buf,100); cout << "Der Eintrag war: " << buf << endl; cout << "Neuer Eintrag: "; cin >> buf; kuFile.seekg(auswahl); kuFile << buf << ';'; kuFile.seekg(0); while(!kuFile.eof() ) { kuFile.get(c); // aktuelles Zeichen in der Variablen c speichern if(c == ';') i = i + 1; } cout << "i= " << i << endl; kuFile.close(); } } int main() { int auswahl; cout << "Willkommen im Menue!" << endl << "Was moechten Sie tun?"<< endl; do { cout << "(1) Kunde anlegen" << endl << "(2) Kunde aendern" << endl << "(0) Abbruch" << endl; cin >> auswahl; switch (auswahl) { case(1): kunde_erstellen(); break; case(2): kunde_aendern(); break; } } while (auswahl != 0); return 0; }
Allerdings hat mir noch keiner so richtig helfen können.
Gruß, sole
-
sole2202 schrieb:
Danke für den Tipp. Habe bei VOLKARD alles durchgeschaut und keine Hinweise zu Dateien gefunden! Kannst Du mir sagen wo genau ich das finden soll?
-
sole2202 schrieb:
Allerdings hat mir noch keiner so richtig helfen können.
Wie? War mein Vorschlag nicht verständlich genug?
Also, dann probier ich's nochmal:
struct data { std::string vorname; std::string name; // etc. }; ... // In der Funktion Kunde aendern, hast du jetzt beispielsweise ein Objekt vom Typ // der Struktur data. data kunde; ... // Einlesen aus Datei infile; std::ifstream infile("die_datei.txt"); if(infile.is_open()) { getline(infile, kunde.vorname); getline(infile, kunde.name); // etc., jenachdem, was du noch so fuer Elemente in der Struktur hast. } // Jetzt aendern: std::cout << "\n Was soll geaendert werden? (0) = Vorname, (1) = Name\n"; unsigned int changeNr; std::cin >> changeNr; if(changeNr >= 0 && changeNr < 2) { std::string s; std::cout << "\nZu aenderndes Element ersetzen durch: "; getline(std::cin, s); switch(changeNr) { case 0: kunde.vorname = s; break; case 1: kunde.name = s; break; } } ...
Ungetestet.
Jetzt verständlicher? (Sorry, für den unschönen und (den für dieses Problem zu) komplizierten Code. Ist aber dafür imho sehr problembezogen. (damit es [hoffentlich etwas verständlicher wird))Caipi
-
Danke für die anschauliche Erklärung. Habe eine Funktion geschrieben, die mir die Einträge anzeigen lassen soll. Allerdings passiert nichts. Wer kann schauen wo der Fehler liegt?
void kunde_anzeigen() { // int auswahl; int i = 0, j = 0; char c; // char buf[100]; string line; cout << "Kundendaten anzeigen" << endl; cout << "Bitte geben Sie die Kundennummer ein:" << endl; cin >> kunde.kuNummer; kunde.kuId = kunde.kuNummer + ".txt"; fstream kuFile(kunde.kuId.c_str(), ios::in| ios::out); if (!kuFile) { cout << "Kundendaten nicht vorhanden" << endl << endl; } else { cout << "Datei erfolgreich geoeffnet!"<< endl; cout << "Informationen zur Kundennummer: " << kunde.kuNummer << endl; while(!kuFile.eof() ) { kuFile.get(c); // aktuelles Zeichen in der Variablen c speichern j = j + 1; } cout << j << " Zeichen in der Datei" << endl; kuFile.seekg(i); while(!kuFile.eof() ) { kuFile.get(c); // aktuelles Zeichen in der Variablen c speichern if(c == ';') line = line + c; i = i + 1; } cout << "Name:" << line << endl; kuFile.close(); } }
Gruß, sole.
-
sole2202 schrieb:
Danke für den Tipp. Habe bei VOLKARD alles durchgeschaut und keine Hinweise zu Dateien gefunden! Kannst Du mir sagen wo genau ich das finden soll?
-
void kunde_anzeigen(){ ifstream std::data; //Kunde Numer abfrage if(data.open(kunde.NR.c_str())){ getline(data,kunde.Name); getline(data,kunde.bl); //... cout<<"Name: "<<kunde.Name<<endl; //... }else{ //Error } data.close(); return 0; }
Wieso willst du mehr schreiben alls du musst?
Ich habe mal ne Regel gelernt:Schreibe so einfach wie moeglich!
Da musst du nicht gross nach fehlern suchen.
Nimm dir dies zu Herzen.PS: Habe den code nicht getestet!
Und gebrauche den cpp code style in deinen Posts!MFG Ghost,
-
Danke Green_Ghost! Habe deinen Code ausprobiert. Ab dem 2. getline funktionirt es leider nicht mehr.
Kann es vielleicht daran liegen, dass er nicht in die nächste Zeile springt?
Gruß, sole!
-
Kann es vielleicht daran liegen, dass er nicht in die nächste Zeile springt?
Kann es daran liegen das das txt keine zweite zeile mehr hat, und die struct kunde.bl nicht gibt?
-
So blöd bin ich ja nun auch nicht
.
Habe das schon auf meine struct angepasst. Hier der Codeabschnitt.
ifstream kuFile(kunde.kuId.c_str()); getline(kuFile, kunde.vorname); getline(kuFile, kunde.name); getline(kuFile, kunde.strasse); getline(kuFile, kunde.plz); getline(kuFile, kunde.ort); cout << "Vorname: " << kunde.vorname <<endl; cout << "Name: " << kunde.name <<endl; cout << "Strasse: " << kunde.strasse <<endl; cout << "PLZ: " << kunde.plz <<endl; cout << "Ort: " << kunde.ort <<endl;
-
???
Bei mir geht so was. Habe zwar auch UNIX / Linux.
Auf Windows kenne ich mich nicht so aus.Aber schreibe mal ein passendes txt file.
und zwar mit diesem da:#include <iostream> #include <fstream> using namespace std; void main(){ ofstream data("123.txt"); data<<"bla1\n"<<"bla2"; //so viel du brauchst! data.close(); return 0; }
Jetzt versuche es aus zu lesen.
-
Ich weiß einfach nicht woran es liegen soll! Bei mir funktioniert der folgende Code unter Windows nicht. Verwende als IDE Visual Studio 6.0
Hier nochmal der Code. Vielleicht mache ich ja auch irgendwas falsch.
#include <iostream> #include <fstream> #include <string> using namespace std; struct data { string name; string vorname; string strasse; string ort; long plz; string kuNummer; string kuId; } kunde; void erstellen() { ofstream data("123.txt"); data<<"bla1;"<< endl << "bla2;"<< endl; data<<"bla3;"<< endl <<"bla4;" << endl; data<<"bla5;"; data.close(); } void anzeigen() { ifstream data("123.txt"); getline(data, kunde.vorname); getline(data, kunde.name); getline(data, kunde.strasse); getline(data, kunde.plz); getline(data, kunde.ort); cout << "Vorname: " << kunde.vorname <<endl; cout << "Name: " << kunde.name <<endl; cout << "Strasse: " << kunde.strasse <<endl; cout << "PLZ: " << kunde.plz <<endl; cout << "Ort: " << kunde.ort <<endl; data.close(); } int main(){ erstellen(); anzeigen(); return 0; }
-
long plz;
Lese mal die getline Referenz!
getline(char**, size_t*, FILE*)
wenn du jetzt getline(data, kunde.plz); machst,
nimmt er die kunde.plz als size_t* und nicht als FILE*
Darum gibt er ein Error, erstens weil er keine FILE* referenz hat,
und zweitens weil long int kein size_t* ist.versuche es mit getline(data,0,kunde.plz);
wobei ich lieber string plz; machen wuerde.MFG Ghost
EDIT: Deutsche Sprache, schwere Sprache
_________________EDIT_______________________________________
Nimm einen Compiler der dir die Fehler beim compilieren anzeigt!
Die Microsoft ******* ist ein Spielzeug.