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 ---
Traiter un tableau et tri
Modérateur : Jérémy
-
Jérémy
- Administrateur du site

- Messages : 2764
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Traiter un tableau et tri
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
C'est en faisant des erreurs, que l'on apprend le mieux !!!
-
Jérémy
- Administrateur du site

- Messages : 2764
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Traiter un tableau et tri
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++;
} C'est en faisant des erreurs, que l'on apprend le mieux !!!
-
francois77
- Passionné

- Messages : 307
- Enregistré en : avril 2022
Traiter un tableau et tri
Bonjour Jérémy,
Avec l'estomac plein le cerveau fonctionne mieux
A+
Francois
Avec l'estomac plein le cerveau fonctionne mieux
A+
Francois
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);
}-
Jérémy
- Administrateur du site

- Messages : 2764
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Traiter un tableau et tri
OUtch !!!!
Dur dur ...
je vais mettre du temps a digérer cela ! pourquoi strcopy ?
Dur dur ...
je vais mettre du temps a digérer cela ! pourquoi strcopy ?
C'est en faisant des erreurs, que l'on apprend le mieux !!!
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)
-
Jérémy
- Administrateur du site

- Messages : 2764
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Traiter un tableau et tri
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, "~"));
C'est en faisant des erreurs, que l'on apprend le mieux !!!
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 9 invités
