Découper un texte avec Arduino
Nems
-
[Dal] Messages postés 6373 Statut Contributeur -
[Dal] Messages postés 6373 Statut Contributeur -
Bonjour j'ai un problème face à moi , jai une variable qui contient un texte (je programme avec Arduino) le texte ressemble a ça: 12345,12345,12345,12345 (c'est un exemple)
Je veux pouvoir afficher chaque bout de texte séparer par une virgule. Mon programme ne doit pas être gourmand en mémoire car j'ai un long programme.
Je veux pouvoir afficher chaque bout de texte séparer par une virgule. Mon programme ne doit pas être gourmand en mémoire car j'ai un long programme.
A voir également:
- Découper un texte avec Arduino
- Découper un pdf - Guide
- Texte de chanson gratuit pdf - Télécharger - Vie quotidienne
- Découper mp4 - Guide
- Découper mp3 - Guide
- Mettre un texte en majuscule - Guide
1 réponse
Salut Nems,
En C standard, on peut faire cela avec strtok(), cette fonction semblant disponible dans le langage C/C++ sur lequel se base Arduino (je ne peux pas tester cependant).
donne :
La fonction standard
Dal
En C standard, on peut faire cela avec strtok(), cette fonction semblant disponible dans le langage C/C++ sur lequel se base Arduino (je ne peux pas tester cependant).
#include <stdio.h>
#include <string.h>
int main(void) {
char texte[255] = "12345,12345,12345,12345";
char * p;
p = strtok(texte, ",");
while (p != NULL) {
printf("%s\n",p);
p = strtok(NULL, ",");
}
return 0;
}
donne :
12345 12345 12345 12345
La fonction standard
strtok()opère en écrasant les caractères séparateurs et en les remplaçant avec des
'\0'terminant chaque sous-chaîne identifiée. Le contenu originel en mémoire est donc altéré, mais cela te permet d'identifier et de traiter les sous-chaînes sans avoir besoin de mémoire supplémentaire, en utilisant juste une variable pointeur pour accéder aux sous-chaînes successives.
Dal
#include <stdio.h> #include <string.h> int main(void) { char texte[255] = "12345,2345,345,45"; char * morceau[4]; char * p; int n = -1; p = strtok(texte, ","); while (p != NULL) { morceau[++n] = p; p = strtok(NULL, ","); } for (n=0; n<4; n++) printf("morceau[%d] = %s\n", n, morceau[n]); return 0; }le résultat étant :
Dans un code réel, il faudrait vérifier qu'il n'y a pas plus de 4 sous-chaînes, s'il y en a moins décider aussi quoi faire, et si le texte comprend un nombre indéterminé de sous-chaînes, faire une allocation dynamique, avec malloc et des realloc pour étendre la mémoire au fur et à mesure si nécessaire, ou faire une première passe en comptant le nombre de pour faire direct un malloc de la bonne dimension (cette dernière solution étant en 2 temps, elle nécessite a priori plus de temps de calcul, mais elle optimisera l'utilisation de la mémoire).