N° | Fonction | Catégorie | Version |
---|---|---|---|
BIS 01 | BiS_TestLCar | 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 dernière position (LCar pour Last Car...). |
Prototype | (BiS_TestLCar 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 dernière occurrence d'un caractère contenu dans une chaîne, ou nil si ce caractère n'existe pas. |
Notes | La fonction ne tient pas 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 dernière qui est retournée. La fonction BiS_TestFCar retourne la première occurrence. La fonction wcmatch peut remplacer cette routine si on ne tient pas compte de la position du caractère. |
Exemples | BiS_TestLCar "azerty" "e") retourne 3 (BiS_TestLCar "azerty" "E") retourne 3 Pas de différence entre majuscules et minuscules. (BiS_TestLCar "azerty" "f") retourne nil "f" n'existe pas dans la chaîne. (BiS_TestLCar 12345 "1") retourne nil Le 1er argument doit être une chaîne. (BiS_TestLCar "21345" "1") retourne 2 (BiS_TestLCar "azertel" "e") retourne 6 Le caractère "e" se trouve 2 fois. La dernière occurrence est retournée. (BiS_TestLCar "azerty" "er") retourne nil Un seul caractère possible dans le 2ème argument. |
1- (defun BiS_TestLCar (*Text1 *Caractere / Cpt1 Flag) 2- (if (and 3- (= (type *Text1) 'STR) 4- (= (type *Caractere) 'STR) 5- ) 6- (progn 7- (setq Cpt1 (strlen *Text1)) 8- (while (> Cpt1 0) 9- (if (= (strcase *Caractere) (strcase(substr *Text1 Cpt1 1))) 10- (setq Flag Cpt1 11- Cpt1 0) 12- (setq Cpt1 (1- Cpt1)) 13- ) 14- ) 15- (eval Flag) 16- ) 17- ) 18- )
Lignes 2-5 : Si les arguments *Text1 et *Caractere sont des chaînes, Ligne 7 : Stocke dans la variable Cpt1 la longueur de la chaine *Text1.. Ligne 8 : Boucle tant que Cpt1 est supérieur à zéro Ligne 9 : Si la majuscule de *Caractere est égale à la majuscule du caractère n° Cpt1 de *Text1 Ligne 10 : Stocke la valeur de Cpt1 dans Flag Ligne 11 : et met le compteur Cpt1 à zéro pour arrêter la boucle. Ligne 12 : Sinon décrémente le compteur de caractères de 1 Ligne 14 : Fin de la boucle while Ligne 15 : Retourne la valeur de Flag qui sera nil, si le caractère n'a pas été trouvé.