I/O von Daten (double) aus/in .txt-files - Anfängerlevel



  • Hallo Zusammen,

    ich bin ein C++ Laie und muss kurzfristig eine .exe schreiben, dass auf eine Datei BGinput zugreift, die Daten (es sind Zeilenweise angeordnet 8 double - Variablen) einliest, berechnet und anschließend in einer anderen .txt ausgibt.

    Zum Einlesen habe ich folgendes geschrieben, irgendwie klappts ned, kriege immer eine Fehlermeldung (s.u.)

    int main(int argc, char* argv[]) {

    double n_1;
    double n_sd;
    double n_2d;
    double P_sh;
    double d_max;
    double d_1i;
    double l_fwd;
    double l_aft;

    ifstream inFile;
    inFile.open("GBinput.txt");
    if (inFile.fail()) {
    cerr << "unable to open file input.dat for reading" << endl;
    exit(1);
    }
    n_1=atof(argv[0]);
    n_sd=atof(argv[1]);
    n_2d=atof(argv[2]);
    P_sh=atof(argv[3]);
    d_max=atof(argv[4]);
    d_1i=atof(argv[5]);
    l_fwd=atof(argv[6]);
    l_aft=atof(argv[7]);

    inFile.close();

    Als Ausgabe habe ich folgendes geschrieben:

    ofstream outFile;
    outFile.open("GBresults.txt");
    outFile << d_gb << "// gearbox diameter [m] \n\n";
    outFile << b_gb << "// gearbox width [m] \n\n";
    outFile << m_sh << "// drive shaft weight [kg] \n\n";
    outFile << m_psh1 << "// Fwd propfan shaft weight [kg] \n\n";
    outFile << m_psh2 << "// Aft propfan shaft weight [kg] \n\n";
    outFile << m_ges << "// Gesamtgewicht Gearbox + Shafts [kg] \n\n";
    outFile.close();

    Ich kriege immer die folgende Fehlermeldung:

    "Gearbox.exe": "C:\Windows\System32\ntdll.dll" geladen, Cannot find or open the PDB file
    "Gearbox.exe": "C:\Windows\System32\kernel32.dll" geladen, Cannot find or open the PDB file
    "Gearbox.exe": "C:\Windows\System32\KernelBase.dll" geladen, Cannot find or open the PDB file

    Kann mir bitte einer weiterhelfen. Ich weiss nicht weiter.

    Vielen Dank für Eure Bemühungen / Hilfen!

    Euer C++ - Laie,

    GRK



  • Erstens: Wozu öffnest du überhaupt die Datei, wenn du dann doch die Werte aus der Kommandzeile (argv) holst? (abgesehen davon ist zumindest argv[0] ziemlich sicher kein double-Wert)
    Zweitens: Die Meldungen, die du dort gepostet hast, sind harmlos. Das Konsolenfenster hat sich vermutlich kommentarlos beendet, nachdem es die Meldung über die fehlende Datei gebracht hat.



  • Das sind nicht die richtigen Fehlermeldungen.
    Dein Programm öffnet zwar die Datei "GBinput.txt", aber liest nicht aus ihr. Weißt du überhaupt wozu argc/argv gut sind?

    PS:
    Wir haben hier C/C++ Tags.

    Probier mal

    int main()
    {
      ifstream infile("GBinput.txt");
      vector<double> buf(8);
      for (size_t i = 0; i < 8; ++i)
        infile >> buf[i];
    
      // Berechnungen
    
      ofstream outfile("GBresults.txt");
      // Ausgabe
    }
    

    Fehlerbehandlung natürlich noch einbauen.



  • Hallo cooky451,

    dein Beispiel mit vector<double> buf (8) kriege ich nicht zum laufen.

    Ich habe #include <vector> ergänzt. Habe die Pfade der Dateien sichergestellt. Aber das Programm will die Daten nicht lesen. (habe dies überprüft).

    Also ganz konkret: Meine textdatei schaut so aus:

    Wert 1
    Wert 2
    Wert 3
    ...
    (alles double-Werte; Zeilenweise angeordnet)

    Warum liest mir das Programm die Daten nicht ein. Muss die Datei nicht vielleicht doch erst geöffnet werden?

    Vielen Dank für die Hilfe!


  • Mod

    GRK schrieb:

    Aber das Programm will die Daten nicht lesen. (habe dies überprüft).

    Und wie?



  • ich habe gleich nach

    int main()
    {
    ifstream infile("GBinput.txt");
    vector<double> buf(8);
    for (size_t i = 0; i < 8; ++i)
    infile >> buf[i];

    eine ausgabe machen lassen mittels cout << buf[z.B. 3]


  • Mod

    Führ dies hier mal aus:

    #include <vector>
    #include <fstream>
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
      ifstream infile("GBinput.txt");
      if (infile)
        {
          vector<double> buf(8);
          for (size_t i = 0; i < 8; ++i)
            {
              infile >> buf[i];
              if (infile)
                cout << "Erfolgreich gelesen: " << buf[i] << '\n';
              else
                {
                  cout << "Fehler beim Lesen\n";
                  break;
                }
            }
        }
      else
        cout << "Fehler beim Öffnen\n";
    }
    


  • Danke seppj, du Fuchs!

    Ordner waren im überraschend falschen Verzeichnis.

    Jetzt noch eine letzte Frage,

    das einlesen funktioniert jetzt. Das Auslesen aber nicht. Hab ich es geschafft in den 2 folgenden Zeilen was falsch zu machen oder muss man irgendwo nachschauen, dass der Pfad der einzulesenden Datei nicht gleich ist dem der auszulesenden?

    ofstream outFile ("GBresults.txt");
    outFile << variable << "bisserl Tesxt \n\n";

    Danke schon mal für die tatkräftige Unterstzützung!



  • Auch das hat sich geklärt!

    Besten Dank für Euer aller Hilfe!


Anmelden zum Antworten