BiS_ChgStrNo

Fonction Catégorie Version
BIS 07 BiS_ChgStrNo Gestion de Chaînes 1.0 - Janvier 2007

Description

But Substitue une portion de chaîne par une autre.
Prototype (BiS_ChgStrNo Texte_Cible Ancien_Str New_Str)
Arguments Texte_Cible - Le texte à modifier - chaîne -
Ancien_Str - La portion de chaîne à remplacer - chaîne -
New_Str - La chaîne de remplacement - chaîne -
Retours La chaîne modifiée
Var. globales Néant
Description Remplace toutes les occurrences d'une portion de chaîne par un autre portion de chaîne à l'intérieur d'une chaîne de texte.
Notes Le programme ne fait pas la différence entre majuscules et minuscules dans la recherche de la chaîne à remplacer.
(Dans le cas contraire, voir la fonction BiS_ChgStr)
On peut remplacer une chaîne par une autre chaîne de longueur différente.
Exemples

(BiS_ChgStr "abcdefghabcdefgh" "BCD" "ZwZ")
	retourne   "abcdefghabcdefgh"  
	mais
(BiS_ChgStrNo "abcdefghabcdefgh" "BCD" "ZwZ")
	retourne   "aZwZefghaZwZefgh"

Commande: (Bis_ChgStrNo "abracadabra" "BR" "TRUC")
	retourne   "aTRUCacadaTRUCa"

(BiS_ChgStrNo "aTRUCacadaTRUCa" "TRUC" "br")
	retourne   "abracadabra"

Commande: (BiS_ChgStrNo "abracadabra" 123 "ZZ")
	retourne   nil
	Le 2ème argument n'est pas une chaîne.
	

La fonction


 1-  (defun BiS_ChgStrNo (*OldText *OldStr *NewStr / Lg2 Cpt1 NewText)

 2-     (if (and
 3-             (= (type *OldText) 'STR)
 4-             (= (type *OldStr) 'STR)
 5-             (= (type *NewStr) 'STR)
 6-         )
 7-         (progn
 8-            (setq (setq Lg2 (strlen *OldStr)
 9-                   Cpt1 1
10-                   NewText ""
11-            )
12-            (repeat (strlen *OldText)
13- 	         (if (= (strcase (substr *OldText Cpt1 Lg2))(strcase *OldStr))
14- 	             (setq Newtext (strcat NewText *NewStr)
15- 	                   Cpt1 (1- (+ Cpt1 Lg2))            
16- 	             )  
17-                  (setq Newtext (strcat NewText (substr *OldText Cpt1 1)))  
18-              )
19-              (setq Cpt1 (1+ Cpt1))
20-            )					;   fin  de repeat
21-            (eval NewText)
22-         )						;   fin  de progn ligne 7
23-     )						;   fin  de if  ligne 2
24-  )						

Lignes 2-5 :  Vérifie si les trois arguments sont des chaînes,  et si oui,
Lignes 8, 10 : Initialisation du compteur position_du_1er_caractère_dans_chaine 
						et de la chaîne de retour.
Ligne 12 :      Répète un nombre de fois égal au nombre de caractères de la 
						chaîne à traiter,
Ligne 13 :	  Si la chaîne débutant à numéro Cpt1 (transformée en majuscules) est 
		   égale à la chaîne à changer, (elle-même transformée en majuscules)
Ligne 14 :	  Ajoute à la chaîne de retour, la chaîne de remplacement.
Ligne 15 :	    et au compteur de position la longueur de cette sous-chaîne moins 1
Ligne 17 :	  Sinon, Ajoute à la chaîne de retour, le caractère testé (numéro Cpt1)
Ligne 19 :	  Incrémente le compteur Cpt1 pour passer au caractère suivant.
Ligne 17 :	Remonte ligne 12 
Ligne 18 :	Retourne  la chaîne modifiée.



Repeat : Ici, évalue les lignes 12 à 20 autant de fois qu'il y a de caractères dans la chaîne à modifier
Strlen : Renvoie le nombre de caractères présents dans la chaîne OldText (nombre entier).
Substr : Ici, extrait de la chaîne *OldText la chaîne commençant au n° Cpt1 et de longueur 1 caractère
Strcase : Ici, transforme une chaîne en majuscules.