Newsgroup: it.comp.lang.c++
Titolo: sempre su lettura file di testo, aiuto...

Allora, ho creato una classe per tirar su dei valori da un file di testo,
usando suggerimenti da questo ng.
class CBayesianData
{
public:
 double ISTVal[4];
 double ISTConf[4];
 double DEVVal[3];
 double DEVConf[3];
 int patternKV[8];
 int patternLeg[8];
 int patternNPS[8];
 double IlevelIST[4];
 double IlevelMED[3];
 double IlevelPat[9];
 double IIlevel[4];
 double IIIlevel[3];
};
class Bayesconfig
{
public:
 Bayesconfig(CString File);
 bool Bayesconfig::Parse2(CBayesianData& rete);
 virtual ~Bayesconfig();
private:
 CString NomeFile;
};
//Ora il cpp:
Bayesconfig::Bayesconfig(CString File)
{
 //Costruttore che richiede il path del file (anche relativo)
 NomeFile=File;
}
bool Bayesconfig::Parse2(CBayesianData& rete)
{
 ifstream file(NomeFile);
 string temp;
 char c;
 int i=0;
 while((c = file.get()) != EOF)
 {
  if(c == '/' && file.peek() == '/')
  {
   char t;
   /*ignoro tutti i caratteri fino alla fine della riga*/
   do
   {
   t = file.get();
   }
   while(t != '\n');
   }
  else
   {
   if(c == ';' || c == '\t')
    {
     stringstream oss;
     double d;
     oss << temp;
     oss >> d;
        temp.erase();
   //Metto tutti i valori nella struttura dati Rete
     if (i<=3) rete.ISTVal[i]=d;
     if (i>=4 && i<=7) rete.ISTConf[i-4]=d;
     if (i>=8 && i<=10) rete.DEVVal[i-8]=d;
     if (i>=11 && i<=13) rete.DEVConf[i-11]=d;
     if (i>=14 && i<=21) rete.patternKV[i-14]=d;
     if (i>=22 && i<=29) rete.patternLeg[i-22]=d;
     if (i>=30 && i<=37) rete.patternNPS[i-30]=d;
     if (i>=38 && i<=41) rete.IlevelIST[i-38]=d;
     if (i>=42 && i<=44) rete.IlevelMED[i-42]=d;
     if (i>=45 && i<=53) rete.IlevelPat[i-45]=d;
     if (i>=54 && i<=57) rete.IIlevel[i-54]=d;
     if (i>=58 && i<=60) rete.IIIlevel[i-58]=d;
     i++;
    }
     else
      temp += c;
    }
 }
 return true;
}
Bayesconfig::~Bayesconfig()
{
}
La classe viene così chiamata sul file principale:
 // Config file initialization
 Bayesconfig Config(m_config);
 //Parsing text file and putting them into
 //rete structure, see bayesconfig
 Config.Parse2(rete);
Non dà alcun errore di compilazione, ma i valori poi non sono dentro i vari
array di double!
Sto impazzendo, dove sbaglio?

L'ho riscritto cosě per vedere dove erano i problemi:
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <string>
#include <sstream>
using namespace std;
int main(int argc, char* argv[])
{
 double ISTVal[4];
 double ISTConf[4];
 double DEVVal[3];
 double DEVConf[3];
 int patternKV[8];
 int patternLeg[8];
 int patternNPS[8];
 double IlevelIST[4];
 double IlevelMED[3];
 double IlevelPat[9];
 double IIlevel[4];
 double IIIlevel[3];
 ifstream file("config_tagliente.txt");
 string temp;
 char c;
 int i=0;
 while((c = file.get()) != EOF)
 {
  if(c == '/' && file.peek() == '/')
  {
   char t;
   /*ignoro tutti i caratteri fino alla fine della riga*/
   do
   {
   t = file.get();
   }
   while(t != '\n');
   }
  else
   {
   if(c == ';' || c == '\t')
    {
     stringstream oss;
     double d;
     oss << temp;
     oss >> d;
        temp.erase();
   //Metto tutti i valori nella struttura dati Rete
     if (i<=3) {ISTVal[i]=d;cout << d << endl;}
     if (i>=4 && i<=7) {ISTConf[i-4]=d;cout << d << endl;}
     if (i>=8 && i<=10) {DEVVal[i-8]=d;cout << d << endl;}
     if (i>=11 && i<=13) {DEVConf[i-11]=d;cout << d << endl;}
     if (i>=14 && i<=21) {patternKV[i-14]=d;cout << d << endl;}
     if (i>=22 && i<=29) {patternLeg[i-22]=d;cout << d << endl;}
     if (i>=30 && i<=37) {patternNPS[i-30]=d;cout << d << endl;}
     if (i>=38 && i<=41) {IlevelIST[i-38]=d;cout << d << endl;}
     if (i>=42 && i<=44) {IlevelMED[i-42]=d;cout << d << endl;}
     if (i>=45 && i<=53) {IlevelPat[i-45]=d;cout << d << endl;}
     if (i>=54 && i<=57) {IIlevel[i-54]=d;cout << d << endl;}
     if (i>=58 && i<=60) {IIIlevel[i-58]=d;cout << d << endl;}
     i++;
    }
     else
      temp += c;
   }
 }
 return true;
}
Allora questo piů o meno funziona, nel senso che dalla seconda riga in poi
salta il primo valore.
il testo da cui attinge č:
// Config File for first intention
// valori Istantanei e medi Pitch, KV, Leg, NPS
53.33 111.868 0.843 4.298
// raggio confidenza istantanei e medi Pitch, KV, Leg, NPS
9.82 0.245 0.076 1.224
// valori deviazione standard KV, Leg, NPS
16.078 0.0386 2.98
// raggio confidenza dev standard KV, Leg, NPS
1.608 0.0039 0.298
// Pattern KV
2 1 0 2 2 1 2 2
// Pattern Legato
1 2 2 0 2 2 2 0
// Pattern NPS
0 2 2 2 0 0 0 0
// Archi I livello valori istantanei
0.25 0.3 0.2 0.25
// Archi I livello valori medi
0.3 0.2 0.5
// Archi I livello pattern e dev standard
0.6 0.4 0.6 0.4 0.2 0.3 0.5 0.6 0.6
// Archi II livello pattern e dev standard
0.3 0.1 0.3 0.3
// Archi III livello
0.3 0.2 0.5
L'uscita:
53.33
111.868
0.843
4.298
0.245       //Manca 9.82
0.076
1.224
0.0386
2.98
0.0039
0.298
1
0
2
2
1
2
2
2
2
0
2
2
2
0
2
2
2
0
0
0
0
0.3
0.2
0.25
0.2
0.5
0.4
0.6
0.4
0.2
0.3
0.5
0.6
0.6
0.1
0.3
0.3
0.2
Di fatto non mi spiego perchč l'altro non vada! vedi precedente post.
Se potete aiutarmi ve ne sarei molto grato!
Matteo