matrix mit strtok aus txt-file in 2D array einlesen



  • Hallo,
    ich habe Daten in Matrix-Form in einer txt-Datei vorliegen, das ganze sieht ungefähr so aus:

    0.19 0.3 0.54
    0.52 0.1 0.51
    0.32 0.24 0.55
    0.42 0.15 0.56

    Die anzahl der Spalten und zeolen st jedoch variabel und mir nicht bekannt. Die einzelnen Werte sind durch whitespace getennt. Ist es empfehelsnwert, die Funktion

    strtok(buf,'delimiter')
    

    zu verwenden? Über Vorschläge fürr eine elegante Lösung wäre ich sehr dankbar, ich slebst mit leider kein so versierter C++ programmierer 😞
    Vielen Dank schon mal fü Eure Hilfe!



  • Hallo,
    Ich würde falls sowohl die Zeilen- als auch die Spalten-Anzahl unbekannt sein, jede Zeile zuerst mit getline über einen std::string in einen std::istringstream konvertieren und diesen nun, so lange selbiger good() ist, auslesen.

    Beispiel mit 1D-Vector:

    #include <iostream>
    #include <vector>
    #include <sstream>
    #include <fstream>
    using namespace std;
    
    int main(int argc, char* argv[])
    {
        if(argc != 2)
        {
            cerr << "usage: ./program filename\n";
            return 1;
        }
        ifstream i(argv[1]);
    
        if(i)
        {
            vector<double> values;
            string tmp;
            while(getline(i, tmp))
            {
                istringstream ss(tmp);
                while(ss)
                {
                    double t;
                    ss >> t;
                    values.push_back(t);
                }
            }
            for(vector<double>::iterator it = values.begin(); it != values.end(); ++it)
                cout << *it << ", ";
        }
    }
    

    Gruß Caipi



  • Oh, vielen Dank!
    Und wie würde das ganze für den 2D fall aussehen?



  • tweety schrieb:

    Oh, vielen Dank!
    Und wie würde das ganze für den 2D fall aussehen?

    Ich dachte eigentlich, dass ich dir das als Aufgabe überlasse :).
    Wie sieht denn dein Ansatz aus?

    Gruß Caipi


Anmelden zum Antworten