Datei einlesen - (un)bekannte Anzahl von Werten in einer Zeile



  • Hallo, ich möchte eine Datei einlesen, die folgendermaßen aufgebaut ist:

    {Anzahl Werte} {Wert[0]} {Wert[1]} {Wert[2]} ... {Wert[n]}
    

    Also konkret:

    4 3247  3248  3249  3250  
    7 3253  3239  3197  3179  3178  3252  3251  
    7 3254  3252  3178  3174  3200  3237  3242  
    3 3251  3252  3254  
    6 3254  3242  3243  3255  3253  3251  
    6 3256  3249  3248  3216  3217  3246  
    4 3257  3250  3249  3256  
    6 3258  3259  3241  3202  3199  3207  
    11 3187  3186  3219  3220  3247  3250  3257  3260  3259  3258  3213
    

    Wobei der erste Wert immer die Anzahl der Werte in der entsprechenden Zeile angibt.

    Hat da jemand eine Idee, wie ich das schnell und einfach machen kann?

    in perl würde es so gehen:

    $line = @datei[5];
    @werte = split(" ", $line)
    

    ...

    Also, wer mir sagen kann, wie ich jede Zeile als String einlese (cin, nicht fscanf) und diese Zeile dann nach Leerzeichen in ein Array brösel hat mir geholfen 🙂

    Gruss, Jochen



  • #include <string>
    #include <fstream>
    #include <vector>
    using namespace std;
    
    int main()
    {
      ifstream fin("deinedatei.txt");
      vector<string> inhalt;
    
      for(string line; getline(fin, line); )
      {
        inhalt.push_back(line);
      }
    
      return 0;
    }
    

    So kann man eine Datei schnell und einfach einlesen. vector verhält sich im Zugriff wie ein Array (also inhalt[pos]).

    Jetzt noch ein paar Tipps wie du das ganze splitten kannst:
    string::find()
    string::substr()
    je nach dem auch
    string::erase()



  • #include <vector>
    #include <fstream>
    
    int main() 
    { 	
    
    	std::vector<std::vector<int> > matrix;
    
    	std::ifstream is("...");
    	size_t vectorSize;
    	for(size_t vectorNum = 0; is; ++vectorNum)	
    	{
    		//read vector size
    		is >> vectorSize;
    		if(!is)
    			break;
    
    		//reserve memory for vector in matrix
    		matrix.resize(vectorNum + 1);
    
            //reserver memory for inner vector
    		matrix[vectorNum].resize(vectorSize);
    
    		//read inner vector
    		for(size_t i = 0; i < vectorSize; ++i && is)
    		{
    			is >> matrix[vectorNum][i];
    		}		
    	}
    
    }
    


  • ssm schrieb:

    #include <vector>
    #include <fstream>
    .
    .
    .
    

    Hey, danke, ist genau das was ich gesucht hab!



  • wäre es nicht einfacher die Zahlen einzeln
    einzulesen?
    Sind doch mit Tabs getrennt



  • Genau das hat ssm auch in seinem Code gemacht. 🙂 Meiner war nur ein Vorschlag wie man es machen könnte.


Anmelden zum Antworten