Matrix aus der .txt Datei auslesen und neue Matrix-Model abbilden.



  • in meiner .txt Datei stehen eine vector Prior=[1 2 3 4 5] und eine Matrix Transmat=[2 3 3;3 6 3;3 3 0]

    es sieht ungefähr so aus:

    Prior
    1 2 3 4 5

    Transmat
    2 3 3
    3 6 3
    3 3 0

    jetzt möchte ich diese Matrix mit dem Titel "Transmat" in der .txt Datei aussuchen,die nützlichen Datein auslesen und die Matrix neu abbilden.

    damit hab ich so angefangen:

    #include <iostream>
    #include <vector>
    #include <strstream>
    #include <fstream>
    
    using namespace std;
    
    void main()
    {
    vector<float> vec;
    float temp=0.0f;
    char s[256];
    
    ifstream fin("D:\\Test.txt");
    
    do
    {
    	fin.getline(s,256);
    }
    
    while(!strstr(s,"Transmat"));//ein Teilstring "Transmat" wird gesucht
    
    while(fin>>temp)// die nützlichen Datein in den Vektor einfügen
    vec.push_back(temp);
    
    //for(int i=0;i<(int)vec.size();i++)
    //cout<<vec.at(i)<<' ';
    
    }
    

    jetzt stehen alle Datei der Matrix Transmat in dem Vektor vec:
    vec=[2 3 3 3 6 3 3 3 0]

    aber wie kann ich eine Matrix abbilden?wenn ich versuche eine Matrix durch vector zu definieren wie folgendes:

    vector<vector<float>> vec;
    

    dann funktioniert

    .push_back()
    

    nicht mehr..... 😞



  • Also erstens mal empfehle ich dir, std::string statt char -Arrays und std::string::find() statt strstr() zu verwenden. Den Header <strstream> benötigst du gar nicht.

    push_back() funktioniert bei zweidimensionalen std::vector s genauso. Ein zweidimensionaler std::vector ist eigentlich ein verschachtelter Container, bei dem die einzelnen Elemente wiederum Container vom Typ vector sind. push_back() fügt da also einen ganzen vector ein.

    Zudem ist

    void main()
    

    nicht C++, es heisst nämlich

    int main()
    


  • Nexus schrieb:

    push_back() funktioniert bei zweidimensionalen std::vector s genauso. Ein zweidimensionaler std::vector ist eigentlich ein verschachtelter Container, bei dem die einzelnen Elemente wiederum Container vom Typ vector sind. push_back() fügt da also einen ganzen vector ein.

    vielen Dank!!!aber ich habe noch nicht ganz verstanden,wie man zeilenweise die Datei aus .txt auslesen und wieder in meinen Vector einfügen...

    z.B.eine Matrix in .txt Datei

    2 3 3
    3 6 3
    3 3 0

    ich hab mein Prototyp:

    vector<vector<float>> matrix;
    vector<float> vector;
    float temp;
    
    ifstream fin("D:\\Test.txt");
    

    wenn ich die Datei auslese und in eine Matrix einfüge wie folgendes:

    while(fin>>temp)
    {
        vec.push_back(temp);
        matrix.push_back(vec);
    }
    

    dann sehen der Vektor und die Matrix so aus:

    vec[0....9]={2,3,3,3,6,3,3,3,0}

    matrix[0]={2}
    matrix[1]={2,3}
    matrix[2]={2,3,3}
    .................
    matrix[9]={2,3,3,3,6,3,3,3,0}

    also,diese

    while(fin>>temp)
    

    erkennt es nicht,wann die Zeile zu Ende ist..... 😞



  • Du hast einen Denkfehler in deinem Programm. Du bräuchtest eigentlich zwei Schleifen (eine für den äusseren und eine für den inneren Container).

    Da der operator<< nicht zwischen den Whitespace-Zeichen (Leerschlag, Zeilenumbruch, Tab) unterscheidet, könntest du dir mal std::getline() anschauen, beispielsweise auf dieser Seite.


Anmelden zum Antworten