ymlf
Messages postés8Date d'inscriptionmardi 14 octobre 2003StatutMembreDernière intervention 2 janvier 2004
-
27 oct. 2003 à 17:35
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 2012
-
28 oct. 2003 à 19:26
Problème au niveau du scanf()
int recherche(char *chaine,char *FileName)
{
int i, k;
char *tmp, *tab[50], *timer[20];
FILE *svf;
svf=fopen(FileName,"r");
printf("fichier ouvert");
i=0; k=0;
while(fscanf(svf,"%c, [^\n]",tab[i])!=EOF)// test si ce n'est pas la fin du fichier
{
if(tab[i]!=" ")// recherche les espaces
{
tmp=strcat(tmp,tab[i]); // récupère le mot dans temp
if(tmp==chaine) // test si le mot est un tag timer
{
if ( ( tab[i]=="(" ) && ( tab[i+1]==""" ))
{
while(tab[i]!=""")
{
timer[k]=strcat(timer[k],tab[i]);
i++;
}
k=k++;
printf("\n le timer numero %c", k);
printf("\n le timer %c", timer);
}
Anacr0x
Messages postés515Date d'inscriptiondimanche 25 mai 2003StatutMembreDernière intervention27 avril 20062 27 oct. 2003 à 18:14
Je n'ai pas beaucoup regardé le code mais ya déja des choses qui saute aux yeux :
if(tmp==chaine)
la tu teste les pointeurs, si tu veux faire une comparaison des chaines, utilise strcmp()
tmp=strcat(tmp,tab[i]);
tu inscrit des données ds tmp (un pointeur qui pointe sur rien), fait une allocation dynamique ou utilise un tableau de char normal
et puis inutile de mettre le "tmp="
ymlf
Messages postés8Date d'inscriptionmardi 14 octobre 2003StatutMembreDernière intervention 2 janvier 2004 28 oct. 2003 à 09:15
merci à tous, mais malgrès tous vos coup de main ca ne marche tjs pas!
int recherche(char *chaine,char *FileName)
{
int i, k;
char *tmp, tab[50], *timer[20];
FILE *svf;
svf=fopen(FileName,"r");
printf("fichier ouvert");
i=0; k=0;
while(fscanf(svf,"%c, [^\n]",tab[i])!=EOF)// test si ce n'est pas la fin du fichier
{
if(&tab[i]!=" ")// recherche les espaces
{
tmp=strcat(tmp,&tab[i]); // récupère le mot dans temp
if(strcmp(tmp,chaine)) // test si le mot est un tag timer
{
if ( ( &tab[i]=="(" ) && ( &tab[i+1]==""" ))
{
while(&tab[i]!=""")
{
timer[k]=strcat(timer[k],&tab[i]);
i++;
}
k++;
printf("\n le timer numero %c", k);
printf("\n le timer %c", timer);
}
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 28 oct. 2003 à 14:16
Salut,
Ce que j'ai dit pour tab est egalement valable pour timer.
if(&tab[i]=="(")
alors la tu compares l'adresse mémoire du i-eme element du tableau tab a une chaine de caractere... ca marchera jamais.
if(tab[i] == ')') // ca c bon, comparaison de 2 octets avec ==
Sinon tout a fait a part, pour rechercher une chaine dans un fichier, pourquoi ne pas copier tout le fichier dans un buffer, mettre un 0 a la fin, et faire un strstr() sur le buffer ?
while(!(feof(svf)))
// attente la fin du fichier le problème et que je ne suis pas certain que ca fonctionne avec des fichiers .bas ouvert avec
l'option t
{
if( tab[i] != " ") // recherche les espaces ( PB tab[i] recherche un int ? )
{
strcat(tmp , tab[i]); // récupère le mot dans temp
if(strcmp(tmp,chaine)) // test si le mot est un tag timer
{
if ( ( tab[i] == "(" ) && ( tab[i+1] == """ ))
{
while(tab[i] != """)
{
strcat(timer[k],tab[i]);
i++;
}
k++;
printf("\n le timer numero %c", k);
printf("\n le timer %c", timer);
}
}
i++;
}
}
return 1;
}
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 28 oct. 2003 à 16:14
Salut,
Ca sert a rien de recopier le code a chaque fois si tu corriges pas ce qui est faux.
if (tab[i] == "(") // est faux. il faut mettre '('.
"(" est une chaine de caractere.
'(' est un octet.
Explique plutot comment trouver les tags dont tu a besoin dans tes fichiers .bas, comment on peut les repérer précisement, etc..
Ou mieux donne un bout de fichier .bas...
ymlf
Messages postés8Date d'inscriptionmardi 14 octobre 2003StatutMembreDernière intervention 2 janvier 2004 28 oct. 2003 à 18:21
En fait je cherhce à récuperer le nom des timers : ttest1
je recherche la sequence StartTimer.
Puis ("
recup du nom du timer jusqu'à la fermeture de la paranthèse.
En un second temps
Le script a cette tête.
Sub StartScript()
InitScript
ThinkTime ("0.750")
returnStatus = ClickOnImageRTR("scenarioRTR0.bmp", LEFT_BUTTON, 0)
If returnStatus <> SUCCESS Then
AbortScriptEx (SCRIPT_FAIL)
Exit Sub
End If
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 28 oct. 2003 à 19:07
Salut,
Deja le mieux c'est d'initialiser tab[1500] a 0 et de lire tout ton fichier dedant.
Pour reperer un "StartTimer", soit tu fait avancer un pointeur et tu teste avec strncmp(...), soit tu fais un strstr(...) sur le buffer.
Une fois que tu as trouvé un StartTimer, tu affiche ce qui se trouve entre les (" ") et tu continue jusqu'a la fin (0 final).
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 28 oct. 2003 à 19:26
Salut,
Voici un bout de code illustrant ce que j'ai dit plus haut, avec strstr(..).
int lecture_fichier(char * chaine, char * path)
{
FILE * File;
int i = 0;
char tab[1024];
char timer[128];
char * c;
memset(tab, 0, 1024); // buffer a 0
File = fopen(path, "r");
while((tab[i] = fgetc(File))!= EOF) i++; // ecrit le fichier dans le buffer
c = tab; // c est le pointeur que l'ont va avancer
while(c = strstr(c, chaine))
{
// c pointe sur StarTimer, on rajoute donc strlen(chaine)+3 pour pointer
// sur ce qu'il y a apres le "
c += strlen(chaine)+3;
i = 0;while(*c !'"') timer[i++] *c++; // on copie
timer[i] = 0; // on n'oublie pas le zero final
printf("Timer: %s\n", timer);
}
return 0;
}