Bonjour les Amis,
Voici ma question : Pour un petit projet, il me faudrait pouvoir générer un nom qui change dans une boucle.
Par exemple le radical "IMAGE" qui au déroulement de la boucle d'indice i par xexemple deviendrait "IMAGE1", "IMAGE2" etc
Est il possible de concaténer "IMAGE" avec l'équivalent "texte" de la variable i ?
Merci pour votre réponse.
Char chaine[8];
Strcpy(chaine,"image");
Strcat(chaine,"%d", i);
Hé bé, en voilà une réponse rapide.
Je teste avec ces lignes, mais le compilateur cale car il lui manque une déclaration, du moins pour ce que j'arrive à déduire du flot des textes d'erreur.
Manifestement tu sembles utiliser des fonctions qui ne sont pas natives dans le langage "Arduino".
Y aurait-il une bibliothèque à déclarer s'il te plait ?
Quoi qu'il en soit, merci pour cette réponse rapide, ça fait vraiment plaisir.
Non non, c'est du langage C pur et simple, pas de bibliothèque à importer ...
C'est quoi les messages d'erreur ?
Erreur sur strcat. strcat ne prend que 2 arguments
strcat(s,ct)
la chaîne ct sera ajoutée à la fin de la chaîne s
Mais tu peux utiliser sprintf
sprintf(chaine, "%s%d", radical,num);
Il faut que:
radical soit une chaine de caractères
num soit un entier
chaine soit une chaine de caractères de longueur suffisante pour stocker le résultat (IMPORTANT sinon plantage)
La chaine de format peut même contenir une extension comme par exemple "%s%d.jpg"
Si le radical ne change jamais, il peut être placé en constante : sprintf(chaine, "IMAGE%d", num);
Le message d'erreur était : 'Strcpy' was not declared in this scope
Mais je viens de constater que le "S" majuscule remplacé par "s" fait passer à une erreur sur
la ligne suivante.
Je vais essaiyer d'utiliser toutes les informations qui précèdent, merci pour tous ces renseignements.
j'avoue que je patauge assez avec ces chaînes de caractère, c'est un peu confus pour le moments.
Je vous tiens au courant de mes tentatives.
Encore merci pour le temps que vous me consacrez.
Bon, j'anance un peu. La procédure strcpy(NomFIC,"IMAGE") a bien créé mon texte radical.
Il me reste à ajouter le nombre i, mais sous forme de texte.
Reste que pour concaténer "IMAGE" à i il me faut dans un premier temps transformer i en son équivalent chaine. Je ne sais pas trop comment faire. Print ne me semble pas une solution, car sauf erreur de ma part c'est une fonction "de sortie", hors il me faut récupérer une chaine ASCII qui traduit la valeur entière de i.
Autant pour moi pour le S et strcat ...
donc pour toi :
strcpy(chaine,"IMAGE%d",i)
et tu auras IMAGE1 IMAGE2 ...
Ben non,
strcpy(chaine,"IMAGE%d",i) ne peut pas fonctionner pour deux raisons :
- le format %d étant entre les "", sera pris comme du texte,
- i n'est pas acceptable puisque c'est un entier et non une chaine.
Si ça se trouve la solution est simple, mais pour le moment je tourne en rond.
C'est encore Môamôa !
Bon, après bien des tentatives, mon problème est enfin résolu.
En effet, j'avais mal interprété les informations données par fdufnews.
La solution qu'il propose est effectivement la bonne.
Avec une séquence du genre
for(unsigned char i=0;i<NB_IMAGES;i++)
{sprintf(NomFIC, "%s%d", "IMAGE",i);
strcat(NomFIC,".bmp");
j'obtiens bien une succession de IMAGEn.bmp ce qui constituait mon problème initial.
Le but, c'est de loger sur une SD des images dont les noms se suivent de cette façon. Ainsi, pour les afficher il suffit d'utiliser le compteur de boucle qui correspond au nombre d'images, et l'on est pas obligé de loger dans le programme le nom de toutes les images.
C'est bon, j'ai bien une chaine qui varie et qui me donne le nom des fichiers à visualiser.
Quand j'affecte cette chaine NomFIC à une instruction de type bmpfiles[] il y a bien exploitation du fichier et ... ça tourne !
Quoi qu'il en soit merci, ces informations m'ont été précieuses et je vous en remercie vivement.
Et comme je le dis souvent, il vaut mieux avancer lentement que reculer vite !
for(unsigned char i=0;i<NB_IMAGES;i++)
{sprintf(NomFIC, "%s%d", "IMAGE",i);
strcat(NomFIC,".bmp");
peut être simplifié en
for(unsigned char i=0;i<NB_IMAGES;i++)
{sprintf(NomFIC, "%s%d.bmp", "IMAGE",i);
Oui, merci pour cette information.
Je vais tester cette simplification.