[C] Extract chaîne de caract et Compte [Résolu/Fermé]

Signaler
Messages postés
79
Date d'inscription
lundi 2 mai 2005
Statut
Membre
Dernière intervention
22 octobre 2011
-
Messages postés
79
Date d'inscription
lundi 2 mai 2005
Statut
Membre
Dernière intervention
22 octobre 2011
-
Bonjour,

Je souhaite créer des Pareto (histogrammes) de nombre produits testés par mode de test. Pour cela j'extrais les infos des fichiers texte srtis des testeurs.

J'ai commencé à faire ça, mais j'ai un souci avec le "case" :



/*On extrait le mode de test*/
if (strstr(ligne, "Mode de Test"))
{
/*printf("Mode=%s; ",strext(ligne,15," : "));*/
Lot.Mode[k++] = strext(ligne,15," : ");
}

/*On extrait le numero de wafer*/
if (strstr(ligne, "Wafer")&&(!strstr(ligne, "Wafer a 0")))
{
/*printf("Wafer=%s\n",strext(ligne,3,"Wafer : "));*/
Lot.Wafer=strext(ligne,3,"Wafer : ");
Lot.Wafer2[w++] = strext(ligne,3,"Wafer : ");


/* On print une ligne par wafer*/
fprintf(log,"%s; %d%s%d-%d:%d; %d%s%d-%d:%d; %d min; %s; %s; %s \n",Lot.Lot_id,Lot.jourd,Lot.nommoisd,Lot.anneed,Lot.heuresd,Lot.minutesd,Lot.jourf,Lot.nommoisf,Lot.anneef,Lot.heuresf,Lot.minutesf,duree,Lot.Techno,Lot.Wafer,Lot.Mode[k]);
}

/*---------------------------------------------------*/
/* Création du Pareto des Mode de Test */
/*---------------------------------------------------*/

/*On met le pareto a jour si mode normal, 100% ou pc ho uniquement*/

for (j=0;j<k;j++)
{
for (l=0;l<MAX_MODE;l++)
{
switch (Lot.Mode[j])
{
case ("Normal"):
Tab[1].Name = Lot.Mode[j];
printf("Mode=%s\n",Tab[1].Name);
if (strstr(ligne, "Wafer")&&(!strstr(ligne, "Wafer a 0")))
{ cpt_waf ++; Tab[1].Count = cpt_waf;}
printf("Nb Waf=%d\n",Tab[1].Count);
break;
case ("100%"):
Tab[2].Name = Lot.Mode[j];
printf("Mode=%s\n",Tab[2].Name);
if (strstr(ligne, "Wafer")&&(!strstr(ligne, "Wafer a 0")))
{ cpt_waf ++; Tab[2].Count = cpt_waf;}
printf("Nb Waf=%d\n",Tab[2].Count);
break;
case ("PC"):
Tab[3].Name = Lot.Mode[j];
printf("Mode=%s\n",Tab[3].Name);
if (strstr(ligne, "Wafer")&&(!strstr(ligne, "Wafer a 0")))
{ cpt_waf ++; Tab[3].Count = cpt_waf;}
printf("Nb Waf=%d\n",Tab[3].Count);
break;
case ("Demande"):
Tab[4].Name = Lot.Mode[j];
printf("Mode=%s\n",Tab[4].Name);
if (strstr(ligne, "Wafer")&&(!strstr(ligne, "Wafer a 0")))
{ cpt_waf ++; Tab[4].Count = cpt_waf;}
printf("Nb Waf=%d\n",Tab[4].Count);
break;
case ("Wafer"):
Tab[5].Name = Lot.Mode[j];
printf("Mode=%s\n",Tab[5].Name);
if (strstr(ligne, "Wafer")&&(!strstr(ligne, "Wafer a 0")))
{ cpt_waf ++; Tab[5].Count = cpt_waf;}
printf("Nb Waf=%d\n",Tab[5].Count);
break;
default :
Tab[l].Name = Lot.Mode[j];
printf("Mode def=%s\n",Tab[l].Name);
Tab[l].Count = 1;
printf("Nb Waf def=%d\n",Tab[l].Count);
cpt_waf = 0;
}
}
}

k=0; w=0;


Merci d'avance

PS : je me suis loupée de forum la première fois (j'étais au forum Divers), Désolée

2 réponses

Messages postés
1277
Date d'inscription
jeudi 7 décembre 2000
Statut
Contributeur
Dernière intervention
26 février 2009
175
salut, le case en C/C++ ne prend pas de chaine de caracteres, il prend seulement des entiers.
Messages postés
79
Date d'inscription
lundi 2 mai 2005
Statut
Membre
Dernière intervention
22 octobre 2011

Merci beaucoup...
Ca m'évite de me prendre la tête...

J'avais essayé comme ça avant :

for (j=0;j<k;j++)
for (l=0;l<MAX_MODE;l++)
{
if (l==Up) {Tab[l].Name=Lot.Mode[l]; Tab[l].Count=1; Up++; break;}
else
if ((Tab[l].Name!=NULL)&&(!strcmp(Tab[l].Name, Lot.Mode[l]))) {Tab[l].Count++; break;}
printf("Nom2: %s; Cpt2: %s",Tab[l].Name,Tab[l].Count);
}


Seulement ça ne me compte que le nombre de fois qu'il y a le mode de test présent dans le fichier texte. Or le mode de test est présent qu'une seule fois dans le fichier, et ensuite on a la liste des produits testés.
Moi je voudrais compter le nombre de produits présents dans le fichier.
Je pense qu'il faut rajouter un champ dans la structure :
struct pareto {
char *Name;
int Count; 
}

struct pareto Tab[MAX_MODE]

Mais je ne sais pas comment l'utiliser...