Export von Rechenergebnissen in eine Datei und Reimport in anderes Programm



  • Heute brauche ich mal wieder Hilfe aus dem Forum.
    Nachdem ich den ersten Teil meines Projektes (Berechnung des Bewegungsauflaufes
    eines mit Druckluft betriebenen schlitzgesteurten großen Schlagbohrhammers) erfolgreich gestemmt habe, möchte ich nun die mit einem Iterationsverfahren berechneten Ergebnisse
    (Weg-Zeit-Funktion und zugeordnete Drücke oberhalb und unterhalb des Stufenkolbens) in einer Datei speichern. Von dort sollen sie in ein weiteres (noch zu erstellendes) Programm wieder eingelesen werden, mit dem ich in einem Schnittbild die Kolbenbewegung und gleichzeitig die sich ändernden Drücke visualisieren möchte.

    Mein aktuelles Problem ist die korrekte Ausgabe der Ergebnisse in eine Datei sowie die Wiedereingabe.

    In den nachfolgend kopierten Testprogrammen habe ich zunächst Testdaten in eine Datei "ergebnisse01.txt" exportiert. Der Inhalt dieser Datei nach dem Export ist unten angegeben. Anschließend habe ich mit dem Programm "Eingabe01.cpp" versucht, diese Daten wieder einzulesen.

    Leider zeigt mein Ausgabetest, dass die eingelesenen Daten nicht korrekt sind, offenbar gab es Formatprobleme, obwohl ich die Ausgabe und Eingabe in identischer Weise vorgenommen habe.

    Ich wäre für einen Hinweis dankbar, wo mein Problem liegen könnte.

    heinz-georg187

    //Ausgabe01.cpp
    //Mit diesem Programm soll getestet werden, ob die iterativ berechneten
    // und für jeden Iterationsschritt gespeicherten Daten korrekt
    // in die Datei "ergebnisse01.txt" exportiert werden

    #include <fstream>
    #include <iostream>
    using namespace std;

    int main(){
    float pru[5];
    float pro[5];
    float x[5];
    // Im Testprogramm werden die Daten nicht berechnet sondern vorgegeben

    pru[0]=1.23456;
    pru[1]=2.34567;
    pru[2]=3.45678;
    pru[3]=4.56789;
    pru[4]=5.67891;
    pru[5]=5.98765;
    pro[0]=1.00000;
    pro[1]=1.00001;
    pro[2]=1.00002;
    pro[3]=1.00003;
    pro[4]=1.00004;
    pro[5]=1.00005;
    x[0]=0.00000;
    x[1]=1.00000;
    x[2]=2.12345;
    x[3]=3.45678;
    x[4]=4.56789;
    x[5]=5.67892;

    ofstream datei;
    datei.open("ergebnisse01.txt");
    for(int i= 0;i<6;i++){
    datei<<pru[i]<<pro[i]<<x[i];
    }
    datei.close();

    char response;
    std:cin >> response;
    return 0;
    }
    _____________________

    So lesen sich die exportierten Daten in der Datei "ergebnisse01.txt"
    1.23456102.345671.0000113.456781.000022.123454.567891.000033.456785.678911.000044.567895.987

    651.000055.67892
    _____________________

    //Eingabe01.cpp
    //Mit diesem Programm sollen die in einem anderen Programm für jeden Iterationsschritt i
    //berechneten Ergebnisse (Druecke pru(i) und pro(i) sowie Weg x(i)), welche in die Datei
    // ergebnisse01.txt ausgegeben wurden, wieder eingelesen und weiter benutzt werden.

    #include <iomanip>
    #include <fstream>
    #include <iostream>
    using namespace std;

    int main(){
    float pru[5];
    float pro[5];
    float x[5];

    ifstream datei;
    datei.open("ergebnisse01.txt");
    for(int i= 0;i<5;i++){
    datei>>pru[i]>>pro[i]>>x[i];
    }
    cout<<"\n";
    datei.close();
    // Zur Kontrolle, ob die aus der Datei ergebnisse01.txt wieder eingelesenen Daten
    // mit den an dieses Programm ausgegebenen Daten übereinstimmen (also korrekt gelesen

    //wurden), werden die Ergebnisse ausgedruckt.

    cout<<"\n"<<"Schritt"<<" pru[i] pro[i] x[i]";
    cout<<"\n";
    for(int j=0;j<5;j++)
    {
    cout<<setw(7)<<j;
    cout<<setw(12)<<pru[j];
    cout<<setw(13)<<pro[j];
    cout<<setw(13)<<x[j];
    cout<<"\n";
    }

    //Die an die Datei ergebnisse01.txt ausgegenen Daten waren:
    // pru[0]=1.23456;
    // pru[1]=2.34567;
    // pru[2]=3.45678;
    // pru[3]=4.56789;
    // pru[4]=5.67891;
    // pru[5]=5.98765;
    // pro[0]=1.00000;
    // pro[1]=1.00001;
    // pro[2]=1.00002;
    // pro[3]=1.00003;
    // pro[4]=1.00004;
    // pro[5]=1.00005;
    // x[0]=0;
    // x[1]=1.00000;
    // x[2]=2.12345;
    // x[3]=3.45678;
    // x[4]=4.56789;
    // x[5]=5.67892;

    char response;
    std:cin >> response;
    return 0;
    }

    So sieht das Ergebis aus, was leider keine Übereinstimmung der exportierten und dann wieder

    importierten Daten zeigt:

    Schritt pru[i] pro[i] x[i]
    0 1.23456 0.0345671 1.13e-005
    1 0.456781 2.3e-005 0.123454
    2 0.567891 3.3e-005 0.456785
    3 0.678911 4.4e-005 0.567895
    4 0.987651 5.5e-005 0.67892



  • Nutze einen Separator (sinnigerweise einen, der nicht in den als Text serialisierten floats vorkommen kann) zw. dem Schreiben der Werte, z.B. endl und schmeiße den ganzen setw-Müll raus.


  • Mod

    Wutz schrieb:

    z.B. endl

    Wenn man nicht ganz genau weiß, was das tut und dieses Verhalten wünscht, sollte man endl nicht bei Dateien einsetzen. Nimm ein Leerzeichen oder einen Zeilenumbruch.



  • Herzlichen Dank an Wutz und Sepp. Bevor ich den Beitrag von Sepp gelesen habe, habe ich es mit endl versucht, und es hat funktioniert. Ich kann nun die in der Datei gespeicherten Ergebnisse wieder korrekt in ein anderes Programm einlesen.
    heinz-georg187 🙂


Log in to reply