Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : Jérémy
Traiter un tableau et tri
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
Dans une application j'ai créer plusieurs tableaux contenant des informations "texte".
Par exemple une adresse mail et un nom.
Je reçois toutes ces informations d'un seul tenant que je place dans un buffer.
Les infos sont séparés par des "~" .
Comment je peux affecter chaque infos au bon tableau ?
exemple je reçois dans mon buffer:
"mail@mail.fr~jeremy"
je souhaiterais enregistré
mail@mail.fr dans le tableau MAIL[]
et jeremy dans le tableau NOM[]
je n'arrive pas avec strchr, avez vous déjà effectué des opérations sur les chaines de caractère dans ce genre ?
Je précise que je connais l'ordre dont les infos arriveront.
Merci
Dans une application j'ai créer plusieurs tableaux contenant des informations "texte".
Par exemple une adresse mail et un nom.
Je reçois toutes ces informations d'un seul tenant que je place dans un buffer.
Les infos sont séparés par des "~" .
Comment je peux affecter chaque infos au bon tableau ?
exemple je reçois dans mon buffer:
"mail@mail.fr~jeremy"
je souhaiterais enregistré
mail@mail.fr dans le tableau MAIL[]
et jeremy dans le tableau NOM[]
je n'arrive pas avec strchr, avez vous déjà effectué des opérations sur les chaines de caractère dans ce genre ?
Je précise que je connais l'ordre dont les infos arriveront.
Merci
Traiter un tableau et tri
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
En fait j'ai vu compliqué alors que je peux faire simple sans utilisé de fonction "string"
Code : Tout sélectionner
while ( Buffer[i] != '~')
{
MAIL[i] = Buffer[i];
i++;
}
i++;
while ( Buffer[i] != '~')
{
NOM[i] = Buffer[i];
i++;
}
Traiter un tableau et tri
-
francois77
Passioné- Messages : 307
- Enregistré en : avril 2022
Traiter un tableau et tri
Bonjour,
L'instruction strtok() retourne un par un les éléments d'une chaîne en spécifiant les caractères de séparation. La chaîne traitée est modifiée, les caractères séparateurs étant remplacés par un 0 de fin de chaîne.
L'instruction strtok() retourne un par un les éléments d'une chaîne en spécifiant les caractères de séparation. La chaîne traitée est modifiée, les caractères séparateurs étant remplacés par un 0 de fin de chaîne.
Code : Tout sélectionner
char *s = strtok(buffer, "~");
if (s) {
strcpy(MAIL, s);
s = strtok(NULL, "~");
if (s) strcpy(NOM, s);
}
Traiter un tableau et tri
Traiter un tableau et tri
La fonction strtok() recherche dans le tableau/chaîne buffer le prochain item terminé par '~'. Elle retourne son adresse s et remplace le '~' final par 0. Elle stocke aussi en interne l'adresse p du prochain item, de façon a être lancée plusieurs fois.
Code : Tout sélectionner
chaîne buffer mail@mail.fr~jeremy~toto@toto.com~toto0
s = strtok(buffer, "~"); mail@mail.fr0jeremy~toto@toto.com~toto0
s............p
s = strtok(NULL, "~"); mail@mail.fr0jeremy0toto@toto.com0toto0
s......p
s = strtok(NULL, "~"); mail@mail.fr0jeremy0toto@toto.com0toto0
s........p
s = strtok(NULL, "~"); mail@mail.fr0jeremy0toto@toto.com0toto0
s...p
s = strtok(NULL, "~"); retourne s = 0 (NULL)
Traiter un tableau et tri
-
Jérémy
Administrateur du site- Messages : 2722
- Âge : 44
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Trés belle explication....
cependant quelques détails me perturbe .
le pointeur pointe sur l'adresse du premier token rencontré. Mais comment fait-on pour enregistrer tout le mot sans une boucle ? Pour avancer le pointeur en gros ?
Du coup pourquoi tester s :
Ce code fonctionne du coup !
cependant quelques détails me perturbe .
le pointeur pointe sur l'adresse du premier token rencontré. Mais comment fait-on pour enregistrer tout le mot sans une boucle ? Pour avancer le pointeur en gros ?
Du coup pourquoi tester s :
Code : Tout sélectionner
if (s) {
...
...
}
Ce code fonctionne du coup !
Code : Tout sélectionner
char Buf1[];
char Buf2[];
char Buf3[];
char Buf4[];
Char Buffer[] = "Data1~Data2~Data3~Data4";
strcpy(Buf1, strtok(Buffer, "~"));
strcpy(Buf2, strtok(0, "~"));
strcpy(Buf3, strtok(0, "~"));
strcpy(Buf4, strtok(0, "~"));
Traiter un tableau et tri
Le principe d'utilisation de la fonction c'est effectivement une boucle. Les pointeurs "item retourné" et "prochain item" sont gérés par la fonction, on se contente de la lancer plusieurs fois, en ne spécifiant le buffer qu'une seule fois au début.
On fait des if (s) { et des while (s) car il faut vérifier que s est non nul avant de lui appliquer des fonctions chaîne. La fonction retourne 0 (NULL) quand il n'y a plus d'item, et si tu fais strcpy(BUF, NULL), tu vas avoir des problèmes :)
Code : Tout sélectionner
char *s = strtok(buffer, "~"); int i=0;
while (s) {
strcpy(BUF[i++], s);
s = strtok(NULL, "~");
}
int n=0;
char *s = strtok(buffer, "~");
while (s) {
n++;
if (n%2) strcpy(MAIL, s);
else strcpy(NOM, s);
s = strtok(NULL, "~");
}
On fait des if (s) { et des while (s) car il faut vérifier que s est non nul avant de lui appliquer des fonctions chaîne. La fonction retourne 0 (NULL) quand il n'y a plus d'item, et si tu fais strcpy(BUF, NULL), tu vas avoir des problèmes :)
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 25 invités