Salve a tutti .. sto cercando di leggere dei dati da un file contenente delle linee di testo in cui e` nascosta la dimensione delle righe del blocco da leggere ... per capirci meglio qui ho incollato il file : http://dpaste.com/19HQY58
il programma che ho scritto per ora e` questo :
il programma individua bene la prima sequenza .. trovando la ricorrenza di I= q assegnando quindi la dimensione che segue alla variabile size che mi permette di leggere esattamente il numero di righr che seguino ! dove sto sbagliando ?? vi ringrazio per l'aiutocodice:# include <iostream> # include <fstream> # include <iomanip> # include <string> # include <sstream> # include <cstdlib> # include <cmath> # include <vector> # include <exception> # include <algorithm> # include <cstring> //---------------------------------------------------------------------------------------- using namespace std; //--- Function prototipes string readInput(int args, char* argv[],string& , string&); void readData(vector<vector<vector<double>>>*, string& , int&); //--- int main(int args, char* argv[]){ string time,root ; string filename = "stangle.000000000.dat" ; int N; cout << "Processing " << filename << " ...." << endl; vector<vector<vector<double>>>* ptrData ; vector<vector<vector<double>>> TableData; //cout << "ok" << endl ; ptrData = new vector<vector<vector<double>>>(10); readData(ptrData, filename, N); int k=0; cout << "--------------------" << endl; //ptrData.resize(k) // for(int i ; i < N ; i++ ){ // } /* cout << N << endl ; for(int i=0; i< N; i++ ){ for(int j=0; j<3 ; j++){ cout << ptrData->at(k).at(i).at(j) << ' ' ; } cout << endl ; } */ // return 0; } // //------ void readData( vector<vector<vector<double>>>* data, string& file, int& size){ unsigned int header = 3; string tmp, row ; ifstream inputFile; cout << file << endl; try { inputFile.open(file, ios::in); } catch(...) { cerr << "Error occurred opening file " << file << " program terminate!" << endl; exit(1); } int indx=0; vector<vector<vector<double>>> *vPtr ; //vector<vector<vector<double>>> * //data = new vector<vector<vector<double>>>(10); int k=0; int w=0; getline(inputFile,row); istringstream elem(row); while(elem >> tmp); // if(k==0)http://dpaste.com/19HQY58 while(!inputFile.eof() && k<=1){ while( w++ <= header-1 && getline(inputFile,row)){ istringstream elem(row); if(w == header ){ while(elem >> tmp){ if(strcmp(tmp.c_str(),"I=" )== 0){ elem >> tmp ; size = atoi(tmp.c_str()); } } } } cout << "size = " << size << endl; //cout << size << endl; //k=0; data->resize(size*3) ; data->at(k).resize(size*3) ; for(int i=0; i<size; i++) // resize vector ! data->at(k)[i].resize(3) ; int j=0; while(getline(inputFile,row) && j < size){ istringstream elem(row); for(int i=0; i < 3; i++) elem >> data->at(k)[j].at(i); elem >> tmp ; // 4th columns to skip j++; } //vPtr->at(indx) = data; for(int i=0; i < size ; i++ ) cout << data->at(k).at(i).at(0) << ' ' << data->at(k).at(i).at(1) << ' ' << data->at(k).at(i).at(2) << endl ; k++ ; } }

Rispondi quotando