Problème récupération de donnée INI

Signaler
Messages postés
23
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
27 février 2008
-
Messages postés
23
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
27 février 2008
-
Bonjour,
J'ai un problème lors de la relecture de mes fichiers INI.
Mon fichier est structurée comme ceci:

[1]
003
032
033
021
[2]
001
002
004
001
...

Pour relire chaque valeur j'utilise des char[4], 3 char car 3 digits + un digit pr l'espace
J'arrive à relire tous correctement, mais sauf la derniere valeur avant la [clé].
Lors du debugging, je m'apperçoit que je ne recupère pas mon dernier chiffre.
Par ex, juste avant la clé [2], je relis:

char[j]='0'
char[j+1]='2'
char[j+2]='' //pb

2 réponses

Messages postés
653
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
10 novembre 2014
2
Si tu poste pas ton code personne pourra t'aider..

Neo_Fr
Messages postés
23
Date d'inscription
mercredi 21 novembre 2007
Statut
Membre
Dernière intervention
27 février 2008

Ok, fait pas gaffe à la bidouille pour que sa tourne (en rouge) ;)

CParaMethodeRna CRna::Spectro(const std::string Path_Ini)
{

    CParaMethodeRna ParaSpectro;

    string FichierBaseSpectres [30];
    char NbLongueursOnde [10];
    char LongueurOndeInit [10];
    char Pas [10];
    char Nb_Spectres [10];

    int som=0;
    int nb_ech=80;
   
   
    float moy=0;
    int resultat_moy=0;

    ////////////////////////////////////////////////////////////////////////
    //////Récupération des données dans le fichier BaseSpectres.ini////////
    ////////////////////////////////////////////////////////////////////////

    GetPrivateProfileString(
            "Info",                            //section
            "NbSpectre",                     //cle                           
           "",                                // string par default
           Nb_Spectres,                        //arrivee
           9,                                //taille de larrivee
           Path_Ini.c_str()                    // nom du fichier
    );
    float f_auxNb_Spectres = atof(Nb_Spectres);    //Transtypage necessaire
    ParaSpectro.SetNb_Spectres((int)f_auxNb_Spectres);    // on enregistre le parametre

    GetPrivateProfileString(
            "Info",                            //section
            "NbLongueursOnde ",             //cle                           
           "",                                // string par default
           NbLongueursOnde,                        //arrivee
           9,                                //taille de larrivee
           Path_Ini.c_str()                    // nom du fichier
    );
    float f_auxNbLongueursOnde = atof(NbLongueursOnde);    //Transtypage necessaire
    ParaSpectro.SetNbLongueursOnde((int)f_auxNbLongueursOnde);    // on enregistre le parametre

   

    GetPrivateProfileString(
           "Info",                            //section
           "LongueurOndeInit",                //cle
           "",                                //string par default
           LongueurOndeInit,                //arrivee
           9,                                //taille de larrivee
           Path_Ini.c_str()                    // nom du fichier
    );
    float f_auxLongueurOndeInit = atof(LongueurOndeInit);
    ParaSpectro.SetLongueurOndeInit((int)f_auxLongueurOndeInit);        // on enregistre le parametre

   
   
    GetPrivateProfileString(
           "Info",                            //section
           "Pas",                            //cle
           "",                                //string par default
           Pas,                                //arrivee
           9,                                //taille de larrivee
           Path_Ini.c_str()                    // nom du fichier
    );
    float f_auxPas = atof(Pas);                //Transtypage necessaire
    ParaSpectro.SetPas((int)f_auxPas);        // on enregistre le parametre    
   

//////////////////////////////////////////////////////////////////////////////
//////      Rééchantillonage et stockage dans nouveau fichier INI     ////////
//////////////////////////////////////////////////////////////////////////////
   
    int pas_reech=floor(f_auxNbLongueursOnde/nb_ech);// calcul du pas d'echantillonage
   
    int seuil=pas_reech-1;// fixer seuil à pas_reech-1
   
    int nb_lgOnde_reech = pas_reech*nb_ech;// nouveau nombre de long. d'onde après reechantillonage (ici 720 au lieu de 721)

    int prob=(4*(nb_lgOnde_reech-1));

    int * piTemp = new int[nb_lgOnde_reech ];

    if  (f_auxPas==1)

        {

            FILE * pFile;// creation fichier
           
            char chemin[MAX_PATH];            // recupération chemin de stockage   
            GetCurrentDirectory(MAX_PATH, chemin);
            char *c;
            c = chemin + GetModuleFileName(0, chemin, MAX_PATH);
            while(*c != '\\') c--;
            strcpy(c + 1, "Config\\Spectro.ini");
                               

            pFile = fopen (chemin,"w");    // 'w' écriture dans le nouveau fichier INI réechantillonné

            // ecriture entete du fichier INI
            fprintf (pFile, "%s\n","[Info]");
            fprintf (pFile, "PasReech = %d\n",pas_reech);
            fprintf (pFile, "NbLongueursOndeReech = %d\n",nb_ech);
            fprintf (pFile, "LongueurOndeInit = %d\n",(int)f_auxLongueurOndeInit);
            fprintf (pFile, "Nb_Spectres = %d\n",(int)f_auxNb_Spectres);

            for ( unsigned int i = 1; i< (f_auxNb_Spectres+1) ; i++)
                    {
                       
                        char cSection[10];// tableau temporaire contenant un char par ligne
                   
                        char cTemp [4000];// il faut au minimum que la taille du tableau [ 1+4*iNbLongueurOnde ]
                        sprintf(cSection,"%d",(long)i);//section le numero de l'image = nom de section

                        GetPrivateProfileSection
                                                (    cSection,                    //section le numero de l'image = nom de section
                                                    cTemp,                        //arrivee
                                                    (4*nb_lgOnde_reech),            //taille de larrivee
                                                    Path_Ini.c_str()                // nom du fichier
                                                );

                        fprintf (pFile, "[%0.2s]\n",cSection);//[%0.2]: permet d'avoir 2 chiffres entre crochets..

                        int iTemp    = 0;
                        int iTemp1 = 0;
                        int iTemp2 = 0;
                   

                        for (unsigned int j = 0; j<(4*nb_lgOnde_reech);j= j+4)
                        {
                            //Transtypage necessaire

                            iTemp = cTemp[j]-'0';
                            iTemp1 = cTemp[j+1]-'0';

  
                            iTemp2 = cTemp[j+2]-'0';
                           
                       

                            piTemp[j/4] = ((iTemp*100)+(iTemp1*10)+(iTemp2));// le chiffre int contient 3 char colle '0' '1' '5' et char fin de chaine '/0' = 015
                           
                            //piTemp [j/4]= 100*(cTemp[j]-'0') + 10*(cTemp[j+1]-'0') + (cTemp[j+2]-'0');

                            if (j==prob)
                           
                            {piTemp[j/4]=piTemp[(j/4)-4];}// on considere valeur egale a la precedente

                        /////////////////////////////////////////
                        // reechantillonnage (somme + moyenne) //
                        /////////////////////////////////////////
                               

                            som += piTemp[(j/4)];
                             
                            if ((j/4)==seuil)//si seuil nombre d'echantillon atteind =>moyenne
                             {
                                moy=som/pas_reech;// moyenne
                                           
                                resultat_moy=Arrondi(moy);// arrondir la valeur si non entier
                               
                                           
                                                        
   
                                fprintf (pFile, "%3.3d\n",resultat_moy);
                               

                               
                                seuil=seuil+pas_reech;
                                som=0;
                                moy=0;
                                resultat_moy=0;
                               
                               
                               
                                };    // fin if                   
                           
                       
                        }// for j

           
                        seuil=pas_reech-1;// On remet le seuil=8 car changement de patch
            }// fin for i

       
            fclose (pFile);// Fermeture du fichier car reechantillonnage terminée

        };// fin if pas==1
   
        free (piTemp);

        return ParaSpectro;

    }// fin Spectro