Verschiedene Daten aus Textfile auslesen



  • Hallo,

    hab wieder einmal eine womöglich sehr dumme Frage:
    ich habe nun ein recht umfangreiches Programm fertig gestellt und würde jetzt gerne verschiedenen Anfangsparameter aus einer Textfile ins Programm einlesen.

    Die Datei hat z.B. folgende Form:

    `(double) (double) (double) "Beschreibung der Einträge dieser Zeile"

    (string) "Beschreibung der Einträge dieser Zeile"

    (int) "Beschreibung der Einträge dieser Zeile"

    ...`

    Dabei sind die einzelnen Eintrage mit Tabstop (oder Leerz.) getrennt und die Beschreibungen der einzugebenden Variablen sollen natürlich nicht importiert werden.

    Kann mir da jemand weiterhelfen wie das zu programmieren ist?

    Vielen Dank!



  • wenn du genau weißt, wie die textdatei aufgebaut ist, kannst du es mit cin machen



  • Hallo Poolshark,

    im Prinzip geht das so:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <limits> // numeric_limits
    
    int main()
    {
        using namespace std;
        const streamsize ALLES = numeric_limits< streamsize >::max();
        ifstream datei("Datei.txt");
        if( !datei.is_open() )
        {
            cerr << "Fehler beim Oeffnen der Datei" << endl;
            return -1;
        }
        double d1, d2, d3;
        datei >> d1 >> d2 >> d3;
        datei.ignore( ALLES, '\n' ); // Rest der Zeile überlesen
    
        string wort;
        datei >> wort;
        datei.ignore( ALLES, '\n' ); // Rest der Zeile überlesen
    
        int i;
        datei >> i;
        datei.ignore( ALLES, '\n' ); // Rest der Zeile überlesen
    
        if( datei )
        {
            cout << "alles richtig gelesen" << endl;
            // usw.
        }
        return 0;
    }
    

    Gruß
    Werner



  • Vielen Dank lieber Werner, genau danach habe ich gesucht!
    Eine kurze Frage vielleicht noch:
    Wie kann ich die Zeile 9

    const streamsize ALLES = numeric_limits< streamsize >::max();
    

    verstehen?



  • Poolshark schrieb:

    Vielen Dank lieber Werner, genau danach habe ich gesucht!
    Eine kurze Frage vielleicht noch:
    Wie kann ich die Zeile 9

    const streamsize ALLES = numeric_limits< streamsize >::max();
    

    verstehen?

    Das ist nur eine kürzere Form überall numeric_limits< streamsize >::max(); zu schreiben, näheres erklärt dir die API zur Methode ifstream::ignore(...) genau hier: http://www.cplusplus.com/reference/iostream/istream/ignore/



  • Poolshark schrieb:

    Vielen Dank lieber Werner, genau danach habe ich gesucht!
    Eine kurze Frage vielleicht noch:
    Wie kann ich die Zeile 9

    const streamsize ALLES = numeric_limits< streamsize >::max();
    

    verstehen?

    Das ist die Deklaration einer Variable namens 'ALLES' vom Typ 'std::streamsize'. Diese belege ich hier mit dem größtmöglichen Wert. Den wiederum liefert mir die statische Methode max() der Klasse std::numeric_limits<>.
    Diese Variable mache ich mit vorgestellten 'const' noch konstant, um klar zu legen, dass ich nicht vorhabe, diese im Programm zu verändern.

    Die Zeile ersetzt ein #define ALLES INT_MAX - mit dem Unterschied das obige Konstruktion typsicher ist und daher auch funktioniert, wenn streamsize intern nicht als int definiert ist.

    Gruß
    Werner


Anmelden zum Antworten