BiS_TestLCar

Fonction Catégorie Version
BIS 01 BiS_TestLCar Gestion de Chaînes 1.0 - Janvier 2007

Description

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.

La fonction


  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é.

Type : Renvoie le type de l'élément spécifié.
Strlen : Renvoie le nombre de caractères présents dans la chaîne *Text1 (nombre entier).
Strcase : Renvoie une chaîne dont le ou les caractères en minuscules ont été transformés en majuscules.
Substr : Ici, extrait de la chaîne *Text1 le caractère correspondant au numéro donné par le compteur Cpt1
Eval : Renvoie la valeur de Flag.