BiS_TestFCar

Fonction Catégorie Version
BIS 0 BiS_TestFCar 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 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.

La fonction


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

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