BiS_ChgStr

Fonction Catégorie Version
BIS 06 BiS_ChgStr Gestion de Chaînes 1.0 - Janvier 2007

Description

But Substitue une portion de chaîne par une autre.
Prototype (BiS_ChgStr 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 fait la différence entre majuscules et minuscules.
(Dans le cas contraire, voir la fonction BiS_ChgStrNo)
On peut remplacer une chaîne par une autre chaîne de longueur différente.
Exemples

(BiS_ChgStr "123456789123456789" "456" "AZE")
	retourne   "123AZE789123AZE789"

Commande: (Bis_ChgStr "abracadabra" "br" "TRUC")
	retourne   "aTRUCacadaTRUCa"

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

Commande: (BiS_ChgStr 	"abracadabra" "BR" "ZZ")
	retourne   "abracadabra"
	Fait la différence entre majuscules et minuscules.

Commande: (BiS_ChgStr "abracadabra" "BR" 126)
	retourne   nil
	Le 3ème argument n'est pas une chaîne.
	

La fonction


 1-  (defun BiS_ChgStr (*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 (= (substr *OldText Cpt1 Lg2) *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-  )						;   fin  de defun


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 est égale à la chaîne à changer,
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.


Type : Renvoie le type de l'élément spécifié.
Repeat : Ici, évalue les lignes 12 à 18 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
Strcat : Ligne 13 : Renvoie la chaîne NewText résultant de la concaténation de NewText et de NewChar