Difficolta` leggere dati da un file dati

di il
1 risposte

Difficolta` leggere dati da un file dati

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/19HQY5

il programma che ho scritto per ora e` questo :

# 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++ ;
   }
}

non riesco a catturare correttamente la stringa "I=" che precede la size del file

1 Risposte

  • Re: Difficolta` leggere dati da un file dati

    Non hai gestito la lettera della size male nel caso in cui hai più blocchi nel file.
    Comunque penso che ci sono problemi molto più gravi nel tuo codice, per dire alcuni variabili non inizializzati, variabili create e non usate, inclusione di header che non ti servono, codice commentato senza spiegazione su perché, memory leaks ed altri !
Devi accedere o registrarti per scrivere nel forum
1 risposte