Ausgabe von Daten in unterschiedliche Ordner mit forlaufender Nummerierung



  • Hallo Community,

    ich bin noch sehr neu was C++ angeht (hatte ein semester Vorlesung) und arbeite zur Zeit an einem Programm dass mir Messdaten sortiert.

    Hierzu werden zwei Datenpakete(.txt)-ein Messdatensatz und ein Maschinenparameterdatensatz- eingelesen und dann entsprechend zueinander geordnet.
    Nun möchte ich für jeden Maschinenparameter die zugehörigen Messdaten in eine seperate Datei schreiben. Ich habe bereit versucht den Pfad (char) and der Stelle pfad(x) zu erhöhen (Pfad(x)++; ). Dies funktioniert leider nicht!
    Auch eine Variable konnte ich nicht einbauen.
    Welche anderen möglichkeiten habe ich um dieses Problem zu lösen, bzw. ist das was ich vorhabe überhaupt unsetzbar????? 😕

    Mfg lambik



  • Du nimmst dir eine Zählervariable und hängst sie hinten an einen String dran. Das geht zB einfach über std::stringstream.



  • ohne code ist die ferndiagnose schwierig. allerdings nicht unbedingt in diesem fall.

    ++ bezieht sich in der regel auf zahlen - int z.B.
    was soll ++ mit einem text machen?

    int i = 42; 
    i++; //ok, alles klar
    
    string text = "hallo!";
    text++; //ähm was ist das ergebnis?
    

    text kann natürlich aus zeichen wie buchstaben, punktation aber auch ziffern bestehen.

    string text = "abc123";
    text++; //fehler - "abc123" ist ein text, keine zahl!
    
    string text = "42";
    text++; //fehler - "42" ist ein text, keine zahl!
    

    kurz: du brauchst eine zahl für ++. diese zahl musst du dann in einen string konvertieren.



  • hallo dove,

    ich habe es folgendermaßen versucht:

    char ausgabe="C:/Produkt1.txt";
    ...
    ...//vorbereitung der Daten
    ...
    dateiausgabe.open(ausgabe,ios::in|ios:app)
    ...
    ...//Schreiben des ersten Datenblocks in die Datei
    ...
    dateiausgabe.close()

    ausgabe[9]++; //Hier möchte ich die Zahl 1 auf 2 erhöhen

    dateiausgabe.open(ausgabe,ios::in|ios:app)
    ...
    ...//Schreiben des zweiten Datenblocks als neue Datei
    ...
    dateiausgabe.close()



  • Also als Code:

    char ausgabe[]="C:/Produkt1.txt";
        cout << ausgabe << "\n";
        ausgabe[9]++;
        cout << ausgabe << "\n";
    

    Es kommt raus, dass du nur bis 9, aber nicht bis 10 Zählen kannst 😉

    C:/Produkt1.txt
    C:/Produku1.txt
    

    Aber Achtung: wenn du das so machst, kommst du höchstens bis Produkt9.txt.

    Also: Lieber sowas wie

    string filename = "C:/Produkt" + to_string(i) + ".txt";
    

    nehmen, wobei i die int-Variable ist, die hochgezählt wird.



  • string filename = "C:/Produkt" + to_string(i) + ".txt";

    benutze ich diese Syntax so erhalte ich folgenden Fehler:
    C2668: std::to_string: Mehrdeutiger Aufruf einer überladenen Funktion.



  • zeig mehr code, die zeile ansonsten ist nämlich richtig.



  • #include <iostream>
    #include <fstream>
    #include <string>
    #include <sstream>
    #include "funktionen.h";

    using namespace std;

    int main()
    {

    /**************************************************************/
    string auspfad="C:/Produkt"+to_string(zaehler)+".txt";
    cout<<auspfad;
    zaehler++;
    cout<<auspfad;

    fstream dateiausgabe(auspfad,ios::in|ios::out|ios::app);

    //test
    dateiausgabe.open(auspfad,ios::out|ios::in|ios::app);
    dateiausgabe<<"es funktioniert";
    getchar();
    getchar();

    /*************************************************************/

    }

    bei Visual Basic wird mir nun to_string(zaehler) unterstrichen und das Programm sagt mir es gäbe einen Mehrdeutigen aufruf.



  • lambik schrieb:

    bei Visual Basic wird mir nun to_string(zaehler) unterstrichen und das Programm sagt mir es gäbe einen Mehrdeutigen aufruf.

    Visual Basic?

    du musst natürlich eine variable zähler definieren, bevor du sie verwendest... und du musst, wenn du inkrementierst, den string neu erstellen...

    #include <iostream>
    
    #include <string>
    
    using namespace std;
    
    int main()
    {
    
    int zaehler = 0; //nicht vergessen
    
    string auspfad="C:/Produkt"+to_string(zaehler)+".txt";
    cout<<auspfad;
    zaehler++;
    
    auspfad="C:/Produkt"+to_string(zaehler)+".txt"; //neuen string erstellen
    cout<<auspfad;
    
    }
    


  • Ich habe hier mal einen Screenshot erstellt vom besagten Programmausschnitt:
    https://pl.vc/st6io



  • Dein Uraltcompiler kann das noch nicht. Benutze Visual Studio 2015.



  • 🙄
    Vielen Dank für die Hilfe an alle


Anmelden zum Antworten