N° | Fonction | Catégorie | Version |
---|---|---|---|
BIS 05 | BiS_ChgCar | Gestion de Chaînes | 1.0 - Janvier 2007 |
But | Remplace un caractère par un autre dans une chaîne. |
Prototype | (BiS_ChgCar Texte_Cible Ancien_Car New_Car) |
Arguments | Texte - Le texte à modifier - chaîne - Ancien_Car- Le caractère à remplacer - chaîne - New_Car - Le caractère de remplacement - chaîne - |
Retours | La chaîne modifiée |
Var. globales | Néant |
Description | Remplace toutes les occurrences d'un caractère par un autre caractère dans une chaîne de texte. |
Notes | Le programme fait la différence entre majuscules et minuscules. On peut remplacer un caractère par 2 ou plusieurs caractères, par contre l'inverse n'est pas possible avec cette fonction. (Dans ce cas il faut utiliser les fonctions BiS_ChgStr ou BiS_ChgStrNo) |
Exemples | (Bis_ChgCar "martin" "t" "V") retourne "marVin" (BiS_ChgCar "martin" "T" "V") retourne "martin" Commande: (Bis_ChgCar "abracadabra" "a" "u") retourne "ubrucudubru" Commande: (BiS_ChgCar "abracadabra" "a" "ou") retourne "oubroucoudoubrou" mais, attention, Commande: (BiS_ChgCar "abracadabra" "ra" "u") retourne "abracadabra" Il faut 1 seul caractère comme 2ème argument. (Bis_ChgCar "ABCDEF" 1 "z") retourne nil Le 2ème argument n'est pas une chaîne. |
1- (defun BiS_ChgCar (*OldText *OldChar *NewChar / Cpt1 NewText) 2- (if (and 3- (= (type *OldText) 'STR) 4- (= (type *OldChar) 'STR) 5- (= (type *NewChar) 'STR) 6- ) 7- (progn 8- (setq Cpt1 1 9- NewText "" 10- ) 11- (repeat (strlen *OldText) 12- (if (= (substr *OldText Cpt1 1) *OldChar) 13- (setq Newtext (strcat NewText *NewChar)) 14- (setq Newtext (strcat NewText (substr *OldText Cpt1 1))) 15- ) 16- (setq Cpt1 (1+ Cpt1)) 17- ) ; fin de repeat 18- (eval NewText) 19- ) ; fin de progn ligne 7 20- ) ; fin de if ligne 2 21- ) ; fin de defun
Lignes 2-5 : Vérifie si les trois arguments sont des chaînes, et si oui, Lignes 8, 9 : Initialisation du compteur position_du_caractère_dans_chaîne et de la chaîne de retour. Ligne 11 : Répète un nombre de fois égal au nombre de caractères de la chaîne à traiter, Ligne 12 : Si le caractère numéro Cpt1 est égal au caractère à changer, Ligne 13 : Ajoute à la chaîne de retour, le caractère de remplacement. Ligne 14 : Sinon, Ajoute à la chaîne de retour, le caractère testé (numéro Cpt1) Ligne 16 : Incrémente le compteur Cpt1 pour passer au caractère suivant. Ligne 17 : Remonte ligne 11 Ligne 18 : Retourne la chaîne modifiée.