N° | Fonction | Catégorie | Version |
---|---|---|---|
BIS 0 | BiS_TestFCar | Gestion de Chaînes | 1.0 - Janvier 2007 |
But | Teste si un caractère est contenu dans une chaîne, et si oui, retourne sa première position (FCar pour First Car...). |
Prototype | (BiS_TestFCar Texte Caractère) |
Arguments | Texte - Le texte à analyser - chaîne - Caractère - caractère recherché - chaîne - |
Retours | Nil ou la position du caractère - Entier - |
Var. globales | Néant |
Description | Retourne la position de la première occurrence d'un caractère contenu dans une chaîne, ou nil si ce caractère n'existe pas. |
Notes | La fonction tient compte des majuscules ou des minuscules. Il ne doit y avoir qu'un seul caractère à rechercher. Si l'argument caractère contient plus d'un caractère, le résultat sera obligatoirement nil. S'il y a plusieurs occurrences du caractère dans la chaîne, c'est la position de la première qui est retournée. La fonction BiS_TestLCar retourne la dernière occurrence. La fonction wcmatch peut remplacer cette routine si on ne tient pas compte de la position du caractère. |
Exemples | (BiS_TestFCar "azerty" "e") retourne 3 (BiS_TestFCar "azerty" "E") retourne nil Fait la différence entre majuscules et minuscules. (BiS_TestFCar "azerty" "f") retourne nil "f" n'existe pas dans la chaîne. (BiS_TestFCar 12345 "1") retourne nil Le 1er argument doit être une chaîne. (BiS_TestFCar "21345" "1") retourne 2 (BiS_TestFCar "azertel" "e") retourne 3 Le caractère "e" se trouve 2 fois. La première occurrence est retournée. (BiS_TestFCar "azerty" "er") retourne nil Un seul caractère possible dans le 2ème argument. |
1- (defun BiS_TestFCar (*Text1 *Caractere / Cpt1 Flag TxtLg) 2- (if (and 3- (= (type *Text1) 'STR) 4- (= (type *Caractere) 'STR) 5- ) 6- (progn 7- (setq TxtLg (strlen *Text1) 8- Cpt1 1 9- ) 10- (while (<= Cpt1 TxtLg) 11- (if (= *Caractere (substr *Text1 Cpt1 1)) 12- (setq Flag Cpt1 13- Cpt1 (1+ TxtLg) 14- ) 15- (setq Cpt1 (1+ Cpt1)) 16- ) 17- ) 18- (eval Flag) 19- ) 20- ) 21- )
Lignes 2-5 : Si les arguments *Text1 et *Caractere sont des chaînes, Ligne 7 : Stocke dans la variable TxtLg1 la longueur de la chaîne *Text1.. Ligne 8 : et initialise le compteur de caractères Cpt1 Ligne 10 : Boucle tant que Cpt1 est inférieur ou égal à TxtLg, Ligne 11 : Si *Caractere est égal au caractère n° Cpt1 de *Text1 Ligne 12 : Stocke la valeur de Cpt1 dans Flag Ligne 13 : et met le compteur Cpt1 supérieur à TxtLg pour arrêter la boucle. Ligne 15 : Sinon incrémente le compteur de caractères de 1 Ligne 17 : Fin de la boucle while Ligne 18 : Retourne la valeur de Flag qui sera nil, si le caractère n'a pas été trouvé.