zeilen zerlegen und in extra arrays speichern klappt nicht :-(



  • Hallo leutz,

    In den einzelnen Zeilen stehen immer Werte nach dem Muster: Name,Wert1,Wert2
    Nun möchte ich dass jeweils alle Namen in ein Array gespeichert werden. Alle Wert1 in ein extra array und alle Wert2 in ein extra array.
    Separator=Komma.
    Mein bisheriges Programm:

    #include <iostream>
    #include <fstream>
    
    using namespace std;
    
    int main()
    {
        int n=0; 
        int index=0; 
        int i=0;     
        char name[50]; 
        string str;
       const char sep = ',';
    
        cout << "Welcher Name hat die zu oeffnende Datei?" << endl;
        cin >> name; 
        ifstream dat(name);          
        fstream datei(name, ios::in); 
    
         if(!dat)              
           { cerr << "Die Datei '" << name << "' existiert nicht." << endl;
           system("Pause");
           return EXIT_FAILURE;
            }
    
        while ( !datei.eof() )   
        {
        getline(datei, str);
        n++;                      //nach jedem Durchlauf wird der Zähler n erhöht. Er gibt die Anzahl der Zeilen an.
        } 
    
        char  wertx[n];    
        float werty[n];    
        float wertz[n];
        float wert_y, wert_z;
        char wert_x;
    
        for(index = 0; dat >> wert_x >> sep >> wert_y >> sep >> wert_z; ++index) 
        { wertx[index] = wert_x;
          werty[index] = wert_y;
          wertz[index] = wert_z;
        }
    
    system("PAUSE");
    return 0;    
    
    }
    

    Tut aber nicht....

    bin am verzweifeln...



  • frage_gern schrieb:

    ...Tut aber nicht....

    Kein Wunder - hat ja auch keine Tute.

    Gruß,

    Simon2.



  • while ( !datei.eof() )  
        {
        getline(datei, str);
        n++;                      //nach jedem Durchlauf wird der Zähler n erhöht. Er gibt die Anzahl der Zeilen an.
        }
    

    was soll das bringen alle zeilen in eine variable zu stecken?



  • damit zähle ich doch nur die zeilen!!
    um dann mein array dementsprechend groß zu machen
    ich krieg die zeilen einfach nicht in drei teile getrennt

    help



  • Also wenn die Zeilen in Deiner Datei zB.so aussehen:

    otto, 12.786, 456.77
    gustav , 34.22, 22.99

    kannst Du es so schreiben:

    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    
    int main()
    {
        int n = 0;
        char name[50];
    
        cout << "Welcher Name hat die zu oeffnende Datei?" << endl;
        cin >> name;
    
        ifstream datei(name);          
    
         if(!datei)              
           { cerr << "Die Datei '" << name << "' existiert nicht." << endl;
           system("Pause");
           return EXIT_FAILURE;
            }
    
        while (!datei.eof() )  
        {   char buf[256];
            datei.getline(buf, 256);
            n++;                      //nach jeder Zeile wird der Zähler n erhöht. Er gibt die Anzahl der Zeilen an.
        }
        datei.close();
        ifstream dat(name);
    
        string* wertx = new string[n];    
        float* werty = new float[n];    
        float* wertz = new float[n];
    
        for(int i = 0; i < n; i++)
        { 
            char tmp;
    
            dat >> wertx[i];
            if (wertx[i].c_str()[wertx[i].size()-1] == ',')
                wertx[i].resize(wertx[i].size()-1);
            else
                dat >> tmp;
            dat >> werty[i] >> tmp >> wertz[i];
    
        }
    
    system("PAUSE");
        delete [] wertx;
        delete [] werty;
        delete [] wertz;
    return 0;    
    
    }
    

    mfg 😉



  • Meine Daten liegen allerdings so vor: (ohne leerzeichen nach den kommas)

    hans,21.148,19.88
    franz,50.777185,6.45
    klaus,15.6,7.8
    seth,156.489,15.9
    ali,196.5,178.99
    josef,14587.198,984.66
    haha,1958.247,6.177
    karl,19785.494,147.65

    dann funktioniert das nicht 😞



  • frage_gern schrieb:

    Meine Daten liegen allerdings so vor: (ohne leerzeichen nach den kommas)

    hans,21.148,19.88
    franz,50.777185,6.45
    klaus,15.6,7.8
    seth,156.489,15.9
    ali,196.5,178.99
    josef,14587.198,984.66
    haha,1958.247,6.177
    karl,19785.494,147.65

    dann funktioniert das nicht 😞

    Dann inkludiere oben

    #include <sstream>

    und schreibe die for-Schleife zB. so;

    for(int i = 0; i < n; i++)
        { 
            char buf[256];
            dat.getline(buf, 256);
            for (int j = 0; buf[j]; j++)
                if (buf[j] == ',')
                    buf[j] = ' ';
            istringstream istr(buf);
            istr >> wertx[i] >> werty[i] >> wertz[i];
        }
    

    Hoffe es klappt jetzt! 😉



  • man muss nix können, es gibt schon nen dummen der deine arbeit macht



  • balduin,

    du bist der beste!

    VIELEN DANK

    so läufts perfekt!!!
    👍 👍 👍 👍

    THANKS!


Anmelden zum Antworten