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 : jaspannung
mess1 mess2 mess3 mess3
23 2 59 1
56 63 7 1
53 63 10 1string 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 : jaspannung
mess1 mess2 mess3 mess3
23 2 59 1
56 63 7 1
53 63 10 1
Strom
22 33
47 25und 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