BiS_TestStr

Fonction Catégorie Version
BIS 02 BiS_TestStr 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_TestStr 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 tient compte des majuscules ou des minuscules.
(Dans le cas contraire, voir la routine BiS_TestStrNo)
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_TestStr "azerty" "er")	retourne  3

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

(BiS_TestStr "azertyazerty" "az")	retourne  7
 La chaîne "az" figure 2 fois. La dernière occurrence est retournée.
 
(BiS_TestStr "AZERTY" "RTY")   retourne  4

La fonction


   1- (defun BiS_TestStr (*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 (= *Text2 (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  est identique à la portion de *Text1  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.
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.