Datei einlesen



  • Streicher schrieb:

    Da das zuvor nur ein Bsp war sagen wir die ersten beiden stellen.

    Schlussendlich brauch ich die ersten 5 werte sowie die 8. bis 12. Werte. Es wird eben immer komplizierter so, daher dachte ich , dass man alle einliest und man dann einfach die rauspickt, die man für die Rechnung braucht.

    Jedes Streicher-Element enthält die 14 Werte aus einem Eintrag. So wie Gugelmoser schon vorgeschlagen hat, kannst Du jedes mal wenn ein Element gelesen wurde, die von Dir gewünschten Rechnungen durchführen. Etwa in der Art:

    // .. ab Zeile 13 vom meinem letzten Posting
        for( Streicher s; file >> s; )
        {
            R = alleStreicherElemente.m_data[0] + alleStreicherElemente.m_data[1] * T; // R = a1 + a2 * T
            // und hier mit R weiter arbeiten .. oder weitere Rechnungen durchführen
        }
    

    und ist jetzt noch irgendwas unklar?

    :xmas2: Werner



  • Hab ich nicht dann wieder das Problem, dass das R immer überschrieben wird?



  • Streicher schrieb:

    Hab ich nicht dann wieder das Problem, dass das R immer überschrieben wird?

    Dann musst du R eben auch in einem Container ablegen. 😉



  • Wenn es mehr nicht ist...hab aber im moment eher in Problem mit eurem Vorschlag, denn es kommt für die Zeile:

    R = alleStreicherElemente.m_data[0] + alleStreicherElemente.m_data[1] * T; // R = a1 + a2 * T
    

    Folgender Fehler:

    error: 'class std::vector<Streicher, std::allocator<Streicher> >' has no member named 'm_data'
    


  • Streicher schrieb:

    Wenn es mehr nicht ist...hab aber im moment eher in Problem mit eurem Vorschlag, denn es kommt für die Zeile:

    R = alleStreicherElemente.m_data[0] + alleStreicherElemente.m_data[1] * T; // R = a1 + a2 * T
    

    Folgender Fehler:

    error: 'class std::vector<Streicher, std::allocator<Streicher> >' has no member named 'm_data'
    

    Da fehlt eine Dereferenzierung: :p

    int main()
    {
        using namespace std;
        vector<Streicher> alleStreicherElemente;
    
        ifstream file("input.txt");
        if( !file.is_open() )
        {
            cerr << "Datei kann nicht geoeffnet werden" << endl;
            return -1;
        }
        file >> skipline >> skipline; //Überspringen der ersten beiden Zeile
        for( Streicher s; file >> s; )
        {
            alleStreicherElemente.push_back( s ); // hier das gerade gelesene Element des Typs Streicher im Container aufnehmen
        }
    
        // ...
        vector<double> results;
        R = alleStreicherElemente[2].m_data[5] + alleStreicherElemente[1].m_data[13] * T; // 6. Wert aus der 3. Wertgruppe + 14. Wert aus der 2. Wertgruppe * T
        results.push_back(R);
        //...
    
        return 0;
    }
    


  • Also auf jeden Fall klappt der Code und es sieht genau danach aus wie ich es haben will. Sind hierbei die Ergebnisse alle im Vector dann gespeichert, so dass man mit denen dann weiterarbeiten kann?
    Wenn ja, wie ruft man dann die einzelnen R's wieder auf?



  • Streicher schrieb:

    Also auf jeden Fall klappt der Code und es sieht genau danach aus wie ich es haben will. Sind hierbei die Ergebnisse alle im Vector dann gespeichert, so dass man mit denen dann weiterarbeiten kann?
    Wenn ja, wie ruft man dann die einzelnen R's wieder auf?

    Das steht eigentlich schon alles da. Du darfst nicht zu komplizierzt denken. Behandel den Vector hierbei wie ein Array:

    cout << "Das Ergebnis meiner ersten Rechnung: " << results[0];
    


  • Okay das aufrufen klappt und das ist genau das was ich brauche! 🙂

    Wenn ich nun das hier habe:

    // ...
        vector<double> results;
        R = alleStreicherElemente[2].m_data[5] + alleStreicherElemente[1].m_data[13] * T; // 6. Wert aus der 3. Wertgruppe + 14. Wert aus der 2. Wertgruppe * T
        results.push_back(R);
        //...
    

    Und dann einen weiteren R ausrechen will, wie mach ich das dann? Einfach dadrunter setzen?

    z.B.:

    // ...
        vector<double> results;
        R = alleStreicherElemente[2].m_data[5] + alleStreicherElemente[1].m_data[13] * T; // 6. Wert aus der 3. Wertgruppe + 14. Wert aus der 2. Wertgruppe * T
    R = alleStreicherElemente[3].m_data[2] + alleStreicherElemente[2].m_data[5] * T;
        results.push_back(R);
        //...
    

    Oder wie kann ich weitere R's ausrechen?



  • Streicher schrieb:

    Und dann einen weiteren R ausrechen will, wie mach ich das dann? Einfach dadrunter setzen?

    z.B.:

    // ...
        vector<double> results;
        R = alleStreicherElemente[2].m_data[5] + alleStreicherElemente[1].m_data[13] * T; // 6. Wert aus der 3. Wertgruppe + 14. Wert aus der 2. Wertgruppe * T
    R = alleStreicherElemente[3].m_data[2] + alleStreicherElemente[2].m_data[5] * T;
        results.push_back(R);
        //...
    

    Oder wie kann ich weitere R's ausrechen?

    Immer wenn du ein R ausrechnest, musst du ein push_back machen. Wo du nun deine Rechnungen brauchst, weißt du ja am besten; wenn dahinter eine bestimmte Logik steht, schreibst du natürlich nicht alle Rechnungen untereinander, sondern machst einen Algorithmus.



  • Vielen Dank für die Hilfe. Das Programm läuft soweit. :xmas1:


Anmelden zum Antworten