BiS_TestStrNo

Fonction Catégorie Version
BIS 03 BiS_TestStrNo Gestion de Chaînes 1.0 - Janvier 2007

Description

But Teste si une chaîne est contenu dans une autre chaîne, et si oui, retourne sa position.
Prototype (BiS_TestStrNo Texte_Cible Texte_recherché)
Arguments Texte_Cible - Le texte cible à analyser - chaîne -
Texte_recherché - Le texte recherché - chaîne -
Retours Nil ou la position du premier caractère de la chaîne - Entier -
Var. globales Néant
Description Retourne la position du premier caractère de la dernière occurrence d'un texte contenu dans une chaîne, ou nil si ce texte n'existe pas.
Notes La fonction ne fait pas la différence entre majuscules et minuscules.
(Dans le cas contraire, voir la routine BiS_TestStr)
S'il y a plusieurs occurrences du texte recherché dans la chaîne, c'est la position de la dernière qui est retournée.
La fonction wcmatch peut remplacer cette routine si on ne tient pas compte de la position du caractère.
Exemples

(BiS_TestStrNo "azerty" "er")   retourne  3

BiS_TestStrNo "azerty" "ER")   retourne  3
   Ne fait pas la différence entre majuscules et minuscules.
   
(BiS_TestStrNo "azerty" "f")   retourne  nil
	"f" n'existe pas dans la chaîne.
	
(BiS_TestStrNo 12345 "12")   retourne  nil
	Le 1er argument doit être une chaîne.
	
(BiS_TestStrNo "21345" "13")   retourne  2

(BiS_TestStrNo "Azertyazerty" "AZ")	retourne  7
 La chaîne "az" figure 2 fois. La dernière occurrence est retournée.
 
(BiS_TestStrNo "AZERTY" "rty")   retourne  4

La fonction


   1- (defun BiS_TestStrNo (*Text1 *Text2 / Cpt1 Flag Lg2) 

   2-    (if (and 
   3-          (= (type *Text1) 'STR)
   4-          (= (type *Text2) 'STR)
   5-        )
   6-       (progn 
   7-         (setq Lg2 (strlen *Text2)
   8-		             Cpt1 (1+ (- (strlen *Text1) Lg2))
   9-		       )
  10-         (while (> Cpt1 0) 
  11-           (if (= (strcase *Text2) (strcase (substr *Text1 Cpt1 Lg2))) 
  12-             (setq Flag Cpt1 
  13-	                   Cpt1 0)
  14-             (setq Cpt1 (1- Cpt1))
  15-           )
  16-         ) 
  17-         (eval Flag)
  18-       )
  19-     )
  20-  )	
Lignes 2-5 : Si les arguments *Text1 et *Text2 sont des chaînes,
Ligne 7 :     Stocke dans la variable Lg2 la longueur de la chaîne *Text2..
Ligne 8 :        et dans la variable Cpt1 la longueur de la chaîne *Text1 après avoir 
                 retiré la longueur de *Text2 -1. 
                  (Il est inutile de tester toute la longueur -- gain de temps.)
Ligne 10 :      Boucle tant que Cpt1 est supérieur à zéro
Ligne 11 :        Si *Text2 transformé en majuscules est égal à la portion de *Text1, 
                   transformée en majuscules, commençant au caractère n° Cpt1 et de 
                   longueur égale a *Text2
Ligne 12 :          Stocke la valeur de Cpt1 dans Flag
Ligne 13 :            et met le compteur Cpt1 à zéro pour arrêter la boucle.
Ligne 14 :          Sinon décrémente le compteur de caractères de 1
Ligne 16 :      Fin de la boucle while
Ligne 17 :  Retourne la valeur de Flag qui sera nil, si la chaîne n'a pas été trouvée.
Type : Renvoie le type de l'élément spécifié.
Strlen : Retourne la longueur d'une chaîne.
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 la chaîne commençant au numéro donné par le compteur Cpt1 et de longueur Lg2.
Eval : Renvoie la valeur de Flag.