N° | Fonction | Catégorie | Version |
---|---|---|---|
BIS 07 | BiS_ChgStrNo | Gestion de Chaînes | 1.0 - Janvier 2007 |
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. |
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.