Text-Tabellen lesen



  • hallo
    ich braüchte Ihre Hilfe dringend!
    ich habe ein programm mit C++ geschrieben,das die folgende textdatei einliest und ausgibt. Er funzt wunderbar.

    Dateiname : Tabelle 1.1
    Datum : 07.02.05
    korrektur : ja

    spannung
    mess1 mess2 mess3 mess3
    23 2 59 1
    56 63 7 1
    53 63 10 1

    string line;
        std::vector<std::vector<int> > matrix;
    
        while(getline(inputstrom,line))
        {
            stringstream stream(line);
    
            int nr[4];
    
            if(stream >> nr[0] >> nr[1] >> nr[2] >> nr[3])
            {
                matrix.push_back(vector<int>(nr,nr + 4));
            }
            for(int RowNum = 0;RowNum < (matrix.size()); ++RowNum) 
    	  {
             // innere vector lesen
             for(int ColNum= 0; (ColNum < 4); ++ColNum)  
    		 {  
    
    	        cout <<setw(5)<<matrix[RowNum][ColNum]<< ' '; 
    		 } 
    	   std::cout << "\r\n"; 
    	  } 
    
        }
    

    ⚠ dann habe ich meine textdatei erweitert und zwar so(Stromwerte wurden eingefügt):

    Dateiname : Tabelle 1.1
    Datum : 07.02.05
    korrektur : ja

    spannung
    mess1 mess2 mess3 mess3
    23 2 59 1
    56 63 7 1
    53 63 10 1
    Strom
    22 33
    47 25

    und habe meinen code natürlich auch erweitert :

    string line;
        std::vector<std::vector<int> > matrix;
        std::vector<std::vector<int> > matrix2;
        while(getline(inputstrom,line))
        {
            stringstream stream(line);
    
            int nr[4];
    
            if(stream >> nr[0] >> nr[1] >> nr[2] >> nr[3])
            {
                matrix.push_back(vector<int>(nr,nr + 4));
            }
          int col[2];
    
            if(stream >> col[0] >> col[1] ) //:confused: diese Bed. wird nie  durchgeführt 
            {
                matrix2.push_back(vector<int>(col,col + 2));
            }
            for(int RowNum = 0;RowNum < (matrix.size()); ++RowNum) 
    	  {
             // innere vector lesen
             for(int ColNum= 0; (ColNum < 4); ++ColNum)  
    		 {  
    
    	        cout <<setw(5)<<matrix[RowNum][ColNum]<< ' '; 
    		 } 
    	   std::cout << "\r\n"; 
    	  } 
    
          for(int Row = 0;Row < (matrix2.size()); ++Row) 
    	  {
             // innere vector lesen
             for(int nCol= 0; (nCol < 2); ++nCol)  
    		 {   
    	        cout <<matrix2[Row][nCol]<< ' '; 
    		 } 
    	   std::cout << "\r\n"; 
    	  }
    

    😕 aber leider die Zeilen (die,mit 2 spalten )wurden nicht angezeigt!
    Danke sehr



  • std::vector<string> Strings;
      std::ifstream fs(FileName); // FileName is Nullterminierter String
      char* ReadBuffer1=new char[8192];
      char* ReadBuffer2=new char[8192];
      do // Zeilen durchlauf
      {
        fs.getline(ReadBuffer1,8192,'\n');
        std::istringstream instream(ReadBuffer1);
        do // Spalten durchlauf
        {
          instream.getline(ReadBuffer2,8192,'\t');
          Strings.push_back(ReadBuffer2);      
        } while(!instream.eof());
        instream.clear();
      } while(!fs.eof());
      fs.clear();
      delete[] ReadBuffer1;
      delete[] ReadBuffer2;
    

    nimm einfach das is für mich nu einfacher als fehler suche 😃

    Das liest dir eine Textdatei ein, die in excel als txt mit tab stop getrennnt gespeichert wurde
    (bin mir grad mit der vector definition nich 100% sicher ob die so war, habs ansonsten mit AnsiString im BorlandBuilder gemacht...
    sollte aber so gehen...)

    Und is ziemlich FLott, sogar bei Tabellen mit ~160 spalten und ca 1000 zeilen (dazu muss der ReadBuffer nur was angepasst werden)

    ach ja du muessstes das halt von von char * in int umwandeln und natuerlich den vector ändern


Anmelden zum Antworten