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
|