Auslesen einer Tabelle und speicher in einem arrray



  • Hallo

    Folgendes Problem. Ich würde gerne eine Tabelle (.txt, Spalten durch tabs getrennt) einlesen und in einem zweidimensionalen Array speichern. Leider weiss ich zu Beginn nicht, wieviele Zeilen und Spalten in der Tabelle sind. Zudem kann es sein, dass die Anzahl Spalten von Zeile zu Zeile unterschiedlich sind. Ich glaube, mit folgendem Code müsste ich die einzelnen Zeilen in den vector values speicher können. Leider weiss ich aber zu dieser Ziet noch nicht, wieviele Zeilen noch kommen werden und ob in weiteren Zeilen die Anzahl Spalten grösser sein wird.

    infile.open("D:\\petersp\\Master-Arbeit DLD\\PF_2D\\properties_C35.txt", ios::in);
    	while(!infile.eof())
    	{
    		getline(infile, s);
    		size_t length = s.length();
    		int i=0;
    		size_t pos = s.find("\t");
    		vector<double> value;
    
    		while(pos != s.npos);
    		{
    			string strpart = s.substr(1, pos-1);
    			s = s.substr(pos+1,length);
    			value.push_back(strtod(strpart.c_str(), NULL));
    			length = s.length();
    			i++;
    		}
    
    	}
    
    	infile.close();
    

    Kann ich im Vorfeld die Tabelle auf Anzahl Zeilen und maximal auftretende Spaltenzahl überprüfen?

    Ich würde gerne so etwas haben:

    double Mat[Anzahl Zeilen][max Anzahl Spalten]
    
    	infile.open("D:\\petersp\\Master-Arbeit DLD\\PF_2D\\properties_C35.txt", ios::in);
    	while(!infile.eof())
    	{
    		getline(infile, s);
    		size_t length = s.length();
    		int i=0;
    		size_t pos = s.find("\t");
    		vector<double> value;
    
    		while(pos != s.npos);
    		{
    			string strpart = s.substr(1, pos-1);
    			s = s.substr(pos+1,length);
    			value.push_back(strtod(strpart.c_str(), NULL));
    			length = s.length();
    			for(int j=0, j<value.length, j++)
    			{
    				Mat[i][j] = value[j];
    			}
    
    			i++;
    		}
    
    	}
    

    Danke für jede Antwort


  • Administrator

    pitaz schrieb:

    Kann ich im Vorfeld die Tabelle auf Anzahl Zeilen und maximal auftretende Spaltenzahl überprüfen?

    Ohne die Datei gelesen zu haben? Das dürfte schwer werden, da dein Programm dann hellsehen müsste 🙂

    Verpacke doch einfach zwei Container ineinander. Beispiele:
    `std::vector<std::vector<double> > Matrix1;

    std::deque<std::deque<double> > Matrix2;

    std::list<std::list<double> > Matrix3;`
    Welche Kombination dir lieber ist, muss du selber entscheiden.

    Grüssli


Anmelden zum Antworten