Möchte Textdatei mit Variablen Namen erstellen



  • Hallo bin leider nicht der beste Programmierer.
    Wir haben Programmieren in der Schule und wir sollen ein Projekt programmieren.
    Wir wollen ein Wahrenwirtschaftssystem Programmieren in dem man
    Kunden/Produktdaten eingeben kann diese sollen dann in einem .txt gespeichert werden.
    Das Funktioniert zwar schon doch leider schreibt das Programm immer in den selben Ordner.
    Ich möchte jedoch das man eine Kundenummer eingibt bevor man die Daten einträgt und dann ein .txt Dokument erstellt wird mit der Endung z.B. Kunde1002.txt und der nächste dann halt z.B. Kunde2003.txt ist dies möglich ??

    Ich habe in diesem Forum was dazu gefunden habe es aber nicht verstanden und es kam das bei raus :

    #include <iostream>
    #include <sstream>
    #include <fstream> // datei-bearbeitung
    #include <string>
    void create_file_from_int(const std::string& "C:\\Programme\\WWS\\KundenTest1.txt", int iZahl);
    using namespace std;
    
    void main (void)
    {
    	system ("pause");
    	create_file_from_int();
    	system ("pause");
    }
    
    void create_file_from_int(const std::string& "C:\\Programme\\WWS\\KundenTest1.txt", int iZahl) 
    	{
    		string sText;
    		int iZahl;	
    
    		cout<<"Kundename : ";
    		cin>>sText;
    		cout<<"Kundennr. : ";
    		cin>>iZahl;
    
    		std::stringstream ss;
    		ss << iZahl; 
    
    		std::ofstream datei("C:\\Programme\\WWS\\KundenTest1.txt" + '/' + ss.str()).c_str(), std::ios::app);
    		datei << sText;
    	}
    

    Das Programm funzt nicht ich bekomme immer Fehlermeldungen ich steig leider nicht durch..
    Habe mich bei der Programmierung auf das hier bezogen

    #include <sstream>
    #include <fstream> // datei-bearbeitung
    #include <string>
    
    void create_file_from_int(const std::string& foldername, int n) {
      std::stringstream ss;
      ss << n;
      std::ofstream file((foldername + '/' + ss.str()).c_str(), std::ios::out);
      if(!file)
        throw something();
    }
    

    Da unser Lehrer weniger Ahnung hat als wir 😡 sollen wir uns die infos ausm inet besorgen meinte er ...

    Macht mich bitte nicht fertig bin ziemlicher Frischling was Programmieren angeht 😞 wäre Froh wenn ihr Helfen könnt



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


  • Mod

    Ich fürchte, du hast da etwas katastrophal missverstanden. Ich nehme an, den unteren Code hast du aus dem Internet kopiert? Der ist eigentlich schon fertig. Du musst vielleicht bloß noch die Zeile 8 deinen Wünschen anpassen (und schmeiß das komische throw-Zeug raus, wenn du nicht weißt, wozu das da ist). Deine eigenen Versuche deuten jedoch darauf hin, dass du nicht so richtig verstanden hast, was eine Variable ist oder wie eine Funktion funktioniert. Das ist so grundlegend, das musst du wiederholen, sonst wirst du niemals ein funktionierendes Programm schreiben können.

    Ein paar weiterführende Anmerkungen:
    - Sehr sinnvoll ist die Funktion derzeit nicht. Sie erstellt diese Datei und schließt sie sofort wieder, ohne dass etwas in der Datei stünde.

    • void main(void) , mach da mal int main() raus. Deine Version ist erstens ungültig, zweitens sehr starker C-Stil. Wenn du das so gelernt hast: Sehr, sehr veraltetes Lehrwerk.
      - Ungarische Notation (ein Kürzel im Variablennamen für den Typ) gilt in C++ als eher hinderlich. Wieder vermutlich ein sehr altes Lehrwerk oder ein verkalkter Lehrer.

    edit:

    Da unser Lehrer weniger Ahnung hat als wir 😡 sollen wir uns die infos ausm inet besorgen meinte er ...

    Sehe ich jetzt erst. Großartig. Kann man das nicht irgendwie anzeigen? Das ist schon kriminell. Der Mann wird schließlich dafür bezahlt und dann kann er es gar nicht und bringt euch den Mist bei, den man im Internet findet. Wenigstens ein gutes Buch sollte es in C++ schon sein (siehe meine Signatur), Internet kannst du zum grundlegenden Lernen vergessen. Internet ist für Spezialthemen und Hilfeforen, nicht für Grundlagen.



  • Vielen Dank schonmal für deine Antwort 🙂 .
    Ja ich habe den Code aus diesem Forum und ihn leider nicht Verstanden was man auch sehen kann :D.
    Das Programm was ich gepostet habe war nur ein Test um das was ich als grundlage genommen habe zu verstehen, ist mir ja leider nicht gelungen..
    Ein Buch haben wir von der Schule aus auch kaufen müssen nur beinhaltet es nur informationen über die Programmierung mit c# ?? welches wir in Klasse 12 lernen werden..
    Vl sollte ich mal den kompletten Ausschnitt des Programmes posten, indem ich die Daten schreibe.
    Wie gesagt kann ich im moment in einen Ordner eine .txt Datei erstellen in der kann ich dann Name Telefonnr. und Adresse abspeichern funktioniert auch alles, aber ist es schwierig einzelne Zeilen auszugeben.
    Also man gibt z.b. Kunde 3 ein dann sollen die Daten aus der 3. Reihe ausgegeben werden hier mal ein teil meiner Programmierung:

    void kundenstamm()
    {	
    string sKunde[3],sText;
    
    	_mkdir("C:\\Programme\\WWS\\Datenstamm\\Kundenstamm");
    	cout<<" \t\t ***************************************************\n"; 
        cout<<" \t\t ********        ++  Kundenstamm  ++        ********\n";  
    	cout<<" \t\t ***************************************************\n\n";
    
    	cout<<" \t\t Sie befinden sich im Kundenstamm.\n";
    	cout<<" \t\t Neuen Kunden hinzuf\201gen   : 1\n";
    	cout<<" \t\t Vorhandene Kunden         : 2\n\n";
    
    	cout<<" \t\t Ihre Wahl : ";
    	cin>>iWahl;
    
    	if (iWahl==1)
    	{
    		kundeneu();
    
    	}
    
    	kunden();
    
    }
    void kundeneu()
    {
    int iZeile=0;
    string sKunde[3],sText;
    
    ofstream datei("c:\\Programme\\WWS\\Datenstamm\\Kundenstamm\\Kunden.txt", ios::app);
    
    		  cout<<"\t\t Geben Sie bitte den Kundennamen ein : ";
    		  cin>>sKunde[0];
    
    			  cout<<"\t\t Geben Sie bitte die Telefonnummer ein : ";
    			  cin>>sKunde[1];
    
    				 cout<<"\t\t Geben Sie bitte die Adresse ein : ";
    				 cin>>sKunde[2];
    
    				 cout<<"\n";
    				 iZeile=iZeile+1;
    				datei << iZeile << "  " << sKunde[0] << "  " << sKunde[1] << "   " << sKunde[2] <<  "  \n" ;
    
    }
    
    void kunden()
    {
    string sText;
    
    cout<<"\t\t Hier sind ihre Kunden : \n\n";
    
    			fstream filestream("c:\\Programme\\WWS\\Datenstamm\\Kundenstamm\\Kunden.txt");
    			getline(filestream,sText);			
    			cout << sText << endl;
    
    	system("pause");
    
    }
    


  • Mhm kann keiner helfen ?
    Das Programm muss Mittwoch abgegeben werden 😞


  • Mod

    F13 schrieb:

    Mhm kann keiner helfen ?

    Es könnten viele und wollen auch sicher viele, aber du machst es uns schwer dir zu helfen. Ich habe zum Beispiel keine Ahnung, was du überhaupt wissen möchtest. Lies bitte mal den ersten und dritten Link in meiner Signatur gründlich durch.



  • Mh ja finde es schwierig das richtig zu formullieren..
    Also dann versuch ichs nochmal anders:
    In dem Forherigen Post seht ihr den Ausschnitt meines Programms den ich bearbeiten möchte.
    Der eigentliche bereich beginnt bei: void kundeneu()
    Dort werden Name, Telefonnummer und Adresse in dem Textdokument Kunden.txt abgespeichert und können in der Funktion : void kunden() wieder ausgegeben werden
    das funktioniert.

    Meine Frage lautet nun :
    Wie bekomme ich es hin, dass die Nächsten Kundendaten in dem Textdokument:
    Kunden1.txt gespeichert wird, der Darauffolgende dann z.B. in Kunden2.txt
    die "1" Soll hierbei Variabel sein.
    ich dann in der Funktion: kunden() die möglichkeite habe eine Eingabe zu Programmieren :
    Geben Sie bitte die Kundennummer ein :
    dort gibt man ein : 2
    Und die Daten für den Kunden2 aus dem textdokument Kunden2.txt werden ausgegeben .

    Ist es so verständlicher ? Tut mir wirklich leid weiß nicht wie ich das sonst erklären kann 😞



  • Sowas in der Art?

    #include <iostream>
    #include <fstream>
    #include <boost/lexical_cast.hpp>
    
    void createNew(std::string arg)
    {
        static int i=0;
        arg+=boost::lexical_cast<std::string>(i).c_str();
        arg+=".txt";
        std::ofstream os(arg.c_str());
    
        ++i;
    }
    
    int main()
    {
        for(int i=0;i<3;++i)
        {
            createNew("datei");
        }
    }
    

    Anstatt boost kannst du auch std::to_String() oder so verwenden, aber ich vergess immer den Namen.
    Das Auslesen kannst du genauso machen, nur dass du halt keine static variable hast, sondern den Wert einliest. Weisst du was das ist?

    Im Moment werden die Dateien, aber nur erzeugt (das auch nicht sehr elegant aber w/e).

    EDIT: Denkfehler beseitigt.



  • Mag sein das deine Antwort stimmt leider steig ich nicht durch 😞 😕
    hatte mir das einfacher vorgestellt wie das man einfach so :

    void kunden()
    {
    string sText;
    char cNummer;
    
    cout<<"\t\t Geben Sie bitte die Kundenummer ein : \n\n";
    cin>>cNummer;
    
    			fstream filestream("c:\\Programme\\WWS\\Datenstamm\\Kundenstamm\\Kunden" << cNummer << ".txt");
    			getline(filestream,sText);			
    			cout << sText << endl;
    
    	system("pause");
    
    }
    

    Die Kundendaten ausgeben kann

    Ich weiß nicht ob es an der komischen lehrweise meines Lehrers liegt oder an meinem Mangendeln wissen über c++ falls es doch ein sehr gehobenes knwo how of c++ benötigt sagt mir lieber das ich es nicht hinbekomme, dann mache ich das Programm einfach ohne festen Speicher halt so das es keine Daten außerhalb des Programms gibt und ich alle Daten bei Programmstart neu eingeben muss mehr haben wir nämlich im Unterricht nicht gelernt ...



  • F13 schrieb:

    ifstream filestream("c:\\Programme\\WWS\\Datenstamm\\Kundenstamm\\Kunden" + cNummer + ".txt");
    

    Versuch mal ungefähr das.
    Im Moment kann aber deine Nummer nicht größer als 10 werden. Ist das gewollt?

    (Ich hätte boost weglassen sollen).



  • F13 schrieb:

    Wie bekomme ich es hin, dass die Nächsten Kundendaten in dem Textdokument:
    Kunden1.txt gespeichert wird, der Darauffolgende dann z.B. in Kunden2.txt
    die "1" Soll hierbei Variabel sein.
    ich dann in der Funktion: kunden() die möglichkeite habe eine Eingabe zu Programmieren :
    Geben Sie bitte die Kundennummer ein :
    dort gibt man ein : 2
    Und die Daten für den Kunden2 aus dem textdokument Kunden2.txt werden ausgegeben .

    #include <iostream>
    #include <fstream>
    #include <string>
    using namespace std;
    
    struct kunde
    {
    	string kdnr;
    	string name;
    	string tel;
    	string adresse;
    };
    
    void kunde_neu()
    {
    	kunde k;
    
    	cout << "\t\t Geben Sie bitte die Kundennummer ein : ";
    	cin >> k.kdnr;
    
    	cout << "\t\t Geben Sie bitte den Kundennamen ein : ";
    	cin >> k.name;
    
    	cout << "\t\t Geben Sie bitte die Telefonnummer ein : ";
    	cin >> k.tel;
    
    	cout << "\t\t Geben Sie bitte die Adresse ein : ";
    	cin >> k.adresse;
    
    	ofstream out(k.kdnr+".txt");
    	out << k.name << "  " << k.tel << "   " << k.adresse;
    }
    
    void kunden()
    {
    	cout << "\t\t Geben Sie bitte die Kundennummer ein : ";
    	string kdnr;
    	cin >> kdnr;
    
    	ifstream in(kdnr+".txt");
    
    	kunde k;
    	in >> k.name;
    	in >> k.tel;
    	in >> k.adresse;
    
    	cout << "\t\t Hallo " << k.name << ", ihre Telefonnummer lautet " << k.tel << " und ihre Adresse ist " << k.adresse << ".";
    } 
    
    int main()
    {
    	kunde_neu();
    	kunden();
    }
    


  • Nun bekomme ich die Fehlermeldung :
    Fehler 1 error C2110: '+': Zwei Zeiger können nicht addiert werden



  • F13 schrieb:

    Nun bekomme ich die Fehlermeldung :
    Fehler 1 error C2110: '+': Zwei Zeiger können nicht addiert werden

    const string path = k.kdnr+".txt";
    ofstream out(path.c_str());
    

  • Mod

    F13 schrieb:

    Nun bekomme ich die Fehlermeldung :
    Fehler 1 error C2110: '+': Zwei Zeiger können nicht addiert werden

    Hast du irgendwo etwas wie "abc" + "def" geschrieben? Bitte bei Fehlern auch Code zeigen! Siehe (nochmal 🙄 ) den dritten Link in meiner Signatur. Falls du Gugelmosers Code meinen solltest (der würde aber andere Fehler liefern): Der braucht C++11. Ohne musst du den fstream mit einem C-String füttern (über die std::string Memberfunktion c_str).



  • Hmm.. ich hätte testen sollen.. Sorry, ich hatte nicht nachgedacht.

    string s="c:\\Programme\\WWS\\Datenstamm\\Kundenstamm\\Kunden";
    s+=cNummer;
    s+=".txt";
    ifstream ifilestream(s.c_str());
    


  • Gehirngulasch 😃

    Ich hatte damit den Post von Nymer gemeint

    F13 schrieb:

    Nun bekomme ich die Fehlermeldung :
    Fehler 1 error C2110: '+': Zwei Zeiger können nicht addiert werden



  • Jaaaa 🙂 es funktioniert 🙂
    Danke an alle die mir bis jetzt geholfen haben 👍 🙂
    Ihr seid hammer 🙂


Anmelden zum Antworten