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
Fonction qui trouve une chaine de caractere dans une autre ?
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour à tous,
Sous mikroC connaissez vous l’existence d'une fonction qui cherche une chaine de caractère dans une autre chaine de caractère et qui renvoie par exemple "1" si le texte est trouvé ou "0" si le texte n'est pas trouvé.
Le but est d'enregistré dans un buffer par UART, les réponses d'un module ou le texte recu.
Ensuite je cherche du texte dans ce buffer par exemple le mot "OK" .
J'ai vu dans l'aide de mikroC les fonctions "strxxx" , mais aucune ne convient ou alors j'ai pas compris comment les utiliser .
Sous mikroC connaissez vous l’existence d'une fonction qui cherche une chaine de caractère dans une autre chaine de caractère et qui renvoie par exemple "1" si le texte est trouvé ou "0" si le texte n'est pas trouvé.
Le but est d'enregistré dans un buffer par UART, les réponses d'un module ou le texte recu.
Ensuite je cherche du texte dans ce buffer par exemple le mot "OK" .
J'ai vu dans l'aide de mikroC les fonctions "strxxx" , mais aucune ne convient ou alors j'ai pas compris comment les utiliser .
Fonction qui trouve une chaine de caractere dans une autre ?
Bonjour,
Essaye la fonction StrStr (voir string library), pour trouver la première occurrence de la chaine recherchée.
Si la fonction retourne une valeur <> 0 alors la chaine recherchée est incluse.
Pour MikroBasic il existe dans Libstock une énorme librairie StrngUtils_P18 contenant 136 fonctions pour la manipulation des chaines, regarde si il n'existe pas l'équivalent pou Mikroc
Essaye la fonction StrStr (voir string library), pour trouver la première occurrence de la chaine recherchée.
Si la fonction retourne une valeur <> 0 alors la chaine recherchée est incluse.
Code : Tout sélectionner
Function locates the first occurrence of the string s2 in the string s1 (excluding the terminating null character).
The function returns pointer to first occurrence of s2 in s1; if no string was found, function returns 0. If s2 is a null string, the function returns 0.
Example
char txt = "mikroElektronika";
char txt_sub = "mikro";
char *res;
res = strstr(txt,txt_sub);
Pour MikroBasic il existe dans Libstock une énorme librairie StrngUtils_P18 contenant 136 fonctions pour la manipulation des chaines, regarde si il n'existe pas l'équivalent pou Mikroc
Fonction qui trouve une chaine de caractere dans une autre ?
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir Jeremy,
exemple:
pour recupere une commande via BlueTooth Android
cde d'une LED et valeur d'un curseur
avec
buffer1 = buffer reception UART1
unsigned char *p1;
exemple:
pour recupere une commande via BlueTooth Android
cde d'une LED et valeur d'un curseur
avec
buffer1 = buffer reception UART1
unsigned char *p1;
Code : Tout sélectionner
p1=strstr(buffer1,"CD1="); // etat commande #1 from BLE
if (p1>0)
{
if (*(p1+4)=='1')
{
// UART1_Write_CText("S1=0\r\n"); // retour d'ordre
Relay1=ON;
UART3_Write_CText(" Relay1_ON\r\n");
}
if (*(p1+4)=='0')
{
// UART1_Write_CText("S1=1\r\n");
Relay1=OFF;
UART3_Write_CText(" Relay1_OFF\r\n");
}
}
p1=strstr(buffer1,"SL=");
if (p1>0)
{ *(p1+6)=0;
// UART3_Write_Text(p1);
// UART3_Write(TAB);
// UART3_Write_Text(p1+3);
// UART3_Write(TAB);
Curseur=atoi(p1+3);
UART3_Write_CText("\r\n Curseur=");
IntToStr(Curseur,CRam1);
UART3_Write_Text(CRam1);
CRLF3();
}
Fonction qui trouve une chaine de caractere dans une autre ?
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Merci à tout les deux,
@ PAul : j'ai vraiment du mal avec les pointeurs , du coup je comprends rien a ton bout de code
@PSPIC : A essayer , mais je ne comprends pas trop . SI il trouve la première occurrence de la chaine recherchée , mais toute la chaine ?
Ce serait donc un bon moyen si c'est le cas . SI la valeur est différente de 0 alors c'est que ma chaine est présente .
@ PAul : j'ai vraiment du mal avec les pointeurs , du coup je comprends rien a ton bout de code
@PSPIC : A essayer , mais je ne comprends pas trop . SI il trouve la première occurrence de la chaine recherchée , mais toute la chaine ?
Ce serait donc un bon moyen si c'est le cas . SI la valeur est différente de 0 alors c'est que ma chaine est présente .
Fonction qui trouve une chaine de caractere dans une autre ?
- Claudius
Passionné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonjour et Bonne Année 2018,
@Jérémy qui a écrit: j'ai vraiment du mal avec les pointeurs...
Comme ce n'est pas la 1st fois que je lis tes difficultés avec peut-être la chose la plus ardue à appréhender en Langage C, je te conseille de les mettre en oeuvre hors contexte des PICs (sous Windows et/ou Linux au sein de petits programmes) en suivant mot à mot des cours du genre Apprendre à programmer les pointeurs en C (*)
Pour ladite fonction, c'est effectivement strstr() ;-)
(*) Cette méthode permet d'aller 100 fois plus vite dans la compréhension d'un concept, reste après à l'utiliser dans l'environnement ad hoc...
Cordialement, A+
--
Claudius
@Jérémy qui a écrit: j'ai vraiment du mal avec les pointeurs...
Comme ce n'est pas la 1st fois que je lis tes difficultés avec peut-être la chose la plus ardue à appréhender en Langage C, je te conseille de les mettre en oeuvre hors contexte des PICs (sous Windows et/ou Linux au sein de petits programmes) en suivant mot à mot des cours du genre Apprendre à programmer les pointeurs en C (*)
Pour ladite fonction, c'est effectivement strstr() ;-)
(*) Cette méthode permet d'aller 100 fois plus vite dans la compréhension d'un concept, reste après à l'utiliser dans l'environnement ad hoc...
Cordialement, A+
--
Claudius
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Fonction qui trouve une chaine de caractere dans une autre ?
Fonction qui trouve une chaine de caractere dans une autre ?
Jérémy a écrit :@PSPIC : A essayer , mais je ne comprends pas trop . SI il trouve la première occurrence de la chaine recherchée , mais toute la chaine ?
Ce serait donc un bon moyen si c'est le cas . SI la valeur est différente de 0 alors c'est que ma chaine est présente .
Si la fonction retourne une valeur <> 0, c'est que la chaine recherchée a été trouvée.
Exemple:
Chaine à explorer: FANTASPICESTFANTASTIQUE soit C1
Chaine recherchée: PIC soit C2
F A N T A S P I C E S T F A N T A S T I Q U E
0 1 2 3 4 5 6 7 8 9 10 11 12
La fonction StrStr(C1,C2) retourne 6.
Fonction qui trouve une chaine de caractere dans une autre ?
-
Jérémy
Administrateur du site- Messages : 2725
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Merci pour cet exemple parlant ! ( phrase très bien choisie par ailleurs )
Mais si je comprends bien, il me semble que cela devrait être plutôt
F A N T A S P I C E S T F A N T A S T I Q U E
1 2 3 4 5 6 7 8 9 10 11 12
Car le "0" est réservé si la chaine recherchée n'est pas trouvé non ?
En tout cas si c'est ca , la méthode est trés celle qui me conviendrait
Mais si je comprends bien, il me semble que cela devrait être plutôt
F A N T A S P I C E S T F A N T A S T I Q U E
1 2 3 4 5 6 7 8 9 10 11 12
Car le "0" est réservé si la chaine recherchée n'est pas trouvé non ?
En tout cas si c'est ca , la méthode est trés celle qui me conviendrait
Fonction qui trouve une chaine de caractere dans une autre ?
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour à Tous,
EN C, une table (ou chaine de caractere) commence toujours à l'indice 0
donc on compte de 0 à 6
strstr( chaine 1, chaine2)
retourne un pointeur !, pas la valeur 6
ce pointeur pointe sur la 7 case ( indice 6 ) de la chaine inspectée
c'est plus facile d'utiliser un pointeur generique ..
il va falloir t'y mettre ..
ex;
Resultat:
EN C, une table (ou chaine de caractere) commence toujours à l'indice 0
donc on compte de 0 à 6
strstr( chaine 1, chaine2)
retourne un pointeur !, pas la valeur 6
ce pointeur pointe sur la 7 case ( indice 6 ) de la chaine inspectée
c'est plus facile d'utiliser un pointeur generique ..
il va falloir t'y mettre ..
ex;
Code : Tout sélectionner
char *p1;
char Chaine1[]="FANTASPIC"
char Chaine2[]="PIC"
....
p1=strstr(Chaine1,Chaine2);
UART1_Write_Text(Chaine1);CRLF1();
UART1_Write_Text(Chaine2); CRLF1();
UART1_Write(*(p1)); CRLF1();
UART1_Write(*(p1+1)); CRLF1();
UART1_Write(*(p1+2)); CRLF1();
UART1_Write(*(p1-1)); CRLF1();
UART1_Write(*(p1-2)); CRLF1();
while(1);
Resultat:
FANTASPIC
PIC
P
I
C
S
A
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 54 invités