VL - Chaînes de caractères

Fonctions portant sur
les chaînes de caractères
(string)

Cliquez le nom de la fonction
pour un accès direct dans la page ...

FONCTION MÉMENTO
vl-string->list Transformer caractères "alpha" en codes ASCII
vl-list->string Transformer liste de codes ASCII en string
vl-string-elt Valeur ASCII d'un élément d'une chaîne de caractères
vl-string-position Recherche de la position d'un caractère par code ASCII
vl-string-trim Tronquer début et/ou fin une chaîne de caractères
vl-string-left-trim Tronquer la gauche d'une chaîne de caractères
vl-string-right-trim Tronquer la droite d'une chaîne de caractères
vl-string-mismatch Comparer deux chaînes de caractères
vl-string-search Chercher une occurrence dans une chaîne de caractères
vl-string-subst Changer une chaîne (string) par une autre
vl-string-translate Remplacer des caractères dans une chaîne de caractères par un ensemble de caractères de substitution

vl-string->list

Transformer caractères
alphanumériques

en codes ASCII


Fonction pour transformer une chaîne de caractères (string) en une liste (list) de tous les caractères de la chaine de caractères (string) donnée en argument en leurs codes ascii correspondants


Syntaxe : (vl-string->list chaîne).

Argument :
chaîne : un chaîne de caractères (string)

Valeur renvoyée : une liste (list) ou nil si échec

Exemple :
Définition de la variable de départ "chaîne-depart" :

(setq chaine-depart "ceci est un test")
(setq chaine-arrivee (vl-string->list chaine-depart))

Renvoie dans la variable "chaine-arrivee" :

(99 101 99 105 32 101 115 116 32 117 110 32 116 101 115 116)

Ce qui correspond à une liste (list) contenant tous les caractères de la chaîne (string) de départ transformés en code ascii.
99 est le code ascii de la lettre "c"
101 est le code ascii de la lettre "e"
et ainsi de suite...

Lien vers la tables des codes ASCII

Haut de page


vl-list->string

Transformer liste de codes ASCII
en chaîne de caractères
(string)

Fonction pour transformer la liste (list) contenant des nombres entiers (integer) représentant des codes ascii en caractères alphanumériques sous forme de chaine de caractères (string) donnée en argument en code ascii. je sais pas si je suis clair là, on dirait un programme politique !!

Syntaxe : (vl-list->string listcodes)

L'argument listcodes doit être une liste de nombres entiers (integer)
sachant que les nombres négatifs ne dont pas autorisés.

Valeur renvoyée : une chaine de caractères (string) qui est la "traduction" des codes ascii en caractères alphanumériques.

Exemple :

(vl-list->string '(100 97 45 99 111 100 101))

Renvoie : "da-code", on a bien le droit de faire de l'auto-promo, non ?

(vl-list->string '(-50))

Renvoie : error: code caractère de la liste incorrect: -50,
et ben oui ! les codes exprimés sous forme de nombres négatifs (inférieur à zéro) sont interdits .

Haut de page


vl-string-elt

valeur ASCII d'un élément
d'une chaîne de caractères

Fonction pour transformer un  élément de chaîne de caractères (string) localisé par sa position dans la chaîne en un nombre entier (integer) représentant le code ascii de ce caractère de la chaîne (string) donnée en argument.

Syntaxe : (vl-string-elt Str Position)

Arguments :
Str : une chaîne de caractères (string)
Position : un nombre entier (integer)

Position :
le premier caractère de la chaîne est en position 0 (zéro)

Exemples :

Soit la chaîne de caractères (string) suivante dans la variable "chaine-depart" :

(setq chaine-départ "ceci est un test")

La ligne de code suivante :

(vl-string-elt chaine-depart 6)

Renvoie :  115
115 est bien le code ascii du caractère "s" et cette lettre "s" est bien le sixième élément de la chaîne de caractères "ceci est un test"
Positions des caractères : c/0 e/1 c/2 i/3 espace/4 e/5 s/6...
Les espaces sont bien sûr comptabilisées.

Haut de page


vl-string-position

Recherche de la position
d'un caractère par

valeur de code ASCII

Cette fonction va chercher dans une chaîne de caractères (string) la position d'un caractère à l'aune de sa valeur en code ascii.

Syntaxe : (vl-string-position char-code str [start-pos [from-end]]

Arguments :
char-code : un nombre entier (integer) positif  spécifiant la valeur du code ascii à rechercher
str : une chaîne de caractères (string)
start-pos : (facultatif) un nombre entier (integer) positif spécifiant la position pour commencer à chercher dans la chaîne (le premier caractère est 0 (zéro))
Si start-pos n'est pas renseigné c'est la valeur
0 (zéro) qui sera prise en compte.
from-end : T ou nil,
Si cet argument est spécifié avec T comme valeur, la recherche commence à la fin de la chaîne et continue en revenant vers l'avant de la chaîne str depuis start-pos.

OK vous avez besoin d'exemples, j'entends que ça ronchonne dans le fond de la classe...

Exemples :

(vl-string-position (ascii "-") "da-code")

Renvoie : 2, le caractère "-" (tiret) est le troisième élément de la chaîne, mais puisque le premier élément est 0 (zéro) la valeur 2 est bien la position dans la chaîne.

(vl-string-position 45 "da-code")

Renvoie : 2, le caractère "-" (tiret) a comme comme code ascii 45 et on voit que donner un argument sous forme d'entier (integer) fonctionne parfaitement.

(vl-string-position (ascii "d") "da-code")

Renvoie : 0, (zéro) (premier caractère) avec une recherche depuis la gauche car on n'a rien renseigné en arguments facultatifs.

(vl-string-position (ascii "d") "da-code" nil T)

Renvoie : 5, car l'argument T fait que la recherche commence à la fin et revient vers le début, et donc il est trouvé un "d" en sixième caractère (position 5).

Lien vers la tables des codes ASCII

Haut de page


vl-string-trim

Tronquer début et/ou fin
d'une chaîne de caractères
(string)

Cette fonction va tronquer une chaîne de caractères (string) en début et en fin de cette dernière d'une chaîne de la chaîne de caractères (string) donnée en premier argument. Ouais, dit comme ça c'est clair comme de l'eau de boudin !

Syntaxe : (vl-string-trim StrSet Str)

Arguments :
StrSet : une chaîne de caractères (string) des caractères à retirer
Str : une chaîne de caractères (string) de laquelle retirer StrSet

Valeur renvoyée :
La chaîne de caractères (string) Str avec les caractères de StrSet  retirés.

Exemples :

1
2
3
4
(setq str "abracadabra")
(setq strset "a")
;variables de départ
(vl-string-trim strset str)

Renvoie : "bracadabr", c'est à dire la chaîne de départ sans le "a" au début ni le "a" de la fin.
Les "a" qui sont encapsulés dans la chaîne ne sont modifiés seuls le début et la fin de la chaîne de caractères (string) en deuxième argument sont visés.

1
2
3
4
(setq str "123.45 mètres")
(setq strset " mètres")
;variables de départ
(vl-string-trim strset str)

Renvoie : "123.45", c'est à dire la chaîne de départ sans le " mètres" de la fin, il n'y avait rien à retirer au début donc la fonction n'a pas touché au début de chaîne.

1
2
3
4
(setq str "longueur : 123.45")
 (setq strset "longueur :  ")
 ;variables de départ
 (vl-string-trim strset str)

Renvoie : "123.45", c'est à dire la chaîne de départ sans "longueur :  " au début, comme il n'y avait rien à retirer à la fin de la chaîne la fonction n'a pas touché à la fin de la chaîne.

Haut de page


vl-string-left-trim

Tronquer la gauche
d'une chaîne de caractères
(string)

Fonction dans la continuité de la précédente, on va tronquer encore mais cette fois seulement à gauche de la chaîne de caractères (string).

Parfaitement identique pour la syntaxe et les arguments.

Exemple :

;variables de départ
(setq str "...il.y.a.trop.de.points.à.gauche.....")
(setq strset ".")
;fin de variables de départ
(vl-string-left-trim strset str)

Renvoie : "il.y.a.trop.de.points.à.gauche....."
Les "." situés au début (sur la gauche) de la chaîne sont expurgés, ceux de la fin et ceux encapsulés dans la chaîne ne sont pas concernés.

Haut de page


vl-string-right-trim

Tronquer la droite
d'une chaîne de caractères
(string)

Fonction dans la continuité de la précédente, on va tronquer encore mais cette fois seulement à droite de la chaîne de caractères (string).

Parfaitement identique pour la syntaxe et les arguments.

Exemple :

1
2
3
4
(setq str "...il.y.a.trop.de.points.à.droite.....")
 (setq str-set ".")
 ;variables de départ
 (vl-string-right-trim str-set str)

Renvoie : "...il.y.a.trop.de.points.à.droite"
Les "." situés à la fin (à droite) de la chaîne sont expurgés, ceux du début et ceux encapsulés dans la chaîne ne sont pas concernés.

Haut de page


vl-string-mismatch

Comparer deux chaînes de caractères (string)

Cette fonction renvoie la longueur commune entre deux chaînes de caractères (string) en fonction d'un position spécifiée.

Syntaxe : (vl-string-mismatch str1 str2 [pos1 pos2 ignore-case])

Arguments :
str1 : la première chaîne de caractères (string)
str2 : la deuxième chaîne de caractères (string)
pos1 : [facultatif] nombre entier (integer) spécifiant la position à rechercher dans la première chaîne, str1.
Si cet argument n'est pas renseigné (il est facultatif) c'est la valeur 0 (zéro) qui est prise en compte.
pos2 : [facultatif] nombre entier  (integer) spécifiant la position à rechercher dans la deuxième chaîne, str2 .
Si cet argument n'est pas renseigné (il est facultatif) c'est la valeur 0 (zéro) qui est prise en compte.
ignore-case : T ou nil
si T : la casse (majuscules/minuscules) est ignorée, sinon la casse est prise en compte.

Valeur renvoyée : un nombre entier (integer).

Exemples :

(vl-string-mismatch "da-code" "da-quode")

Renvoie : 3, car les deux chaînes commencent par les trois mêmes premiers caractères.

(vl-string-mismatch "da-code" "da-quode" 3 3)

Renvoie : 0, car la comparaison se fait dans les deux chaînes depuis le troisième caractère.

(vl-string-mismatch "da-code" "DA-quode" 0 0 nil)

Renvoie : 0, car la comparaison se fait bien dans les deux chaînes depuis le premier caractère, mais l'argument nil fait que la casse est prise en compte et dans ce cas "da" n'est pas identique à "DA"

(vl-string-mismatch "da-code" "DA-quode" 0 0 T)

Renvoie : 3, car la comparaison se fait bien dans les deux chaînes depuis le premier caractère, mais l'argument T fait que la casse n'est pas prise en compte et dans ce cas "da" considéré identique à "DA"

Haut de page


vl-string-search

Chercher une occurrence
dans une chaîne de caractères
(string)

Le titre est assez clair, non ?

Syntaxe : (vl-string-search Recherche Str [StartPos])

Arguments :
Recherche : une chaîne de caractères (string)
Str : une chaîne de caractères (string)
StartPos : [facultatif] un nombre entier (integer) qui définit le départ de recherche dans Str pour trouver l'occurrence (Recherche).
Si cet argument n'est pas renseigné c'est la valeur 0 (zéro) qui est prise par défaut, donc la rechercher part du début de Str.

Valeur renvoyée :
Une valeur numérique sous forme de nombre entier (integer) représentant la position dans la chaîne où l'occurrence spécifiée (Recherche) a été trouvée
nil s
i l'occurrence spécifiée (Recherche) n'a pas été trouvée.

Le premier caractère de la chaîne est la position 0 (zéro).

Exemples :

(vl-string-search "recherche" "à la recherche du temps perdu")

Renvoie : 5, en effet le mot "recherche" commence au cinquième caractère de la chaîne donnée en deuxième argument.
Positions des caractères : à/0, espace/1, l/2, a/3, espace/4 et "recherche" commence au 5.

(vl-string-search "recherche" "à la recherche du temps perdu" 8)

Renvoie : nil, en effet le mot "recherche" commence au cinquième caractère de la chaîne et l'argument start-pos a été renseigné à 8 donc le programme commence la recherche de (Recherche) trop loin dans la chaîne Str pour trouver une occurrence, donc c'est nil qui est renvoyé.

Et s'il y a deux occurrences ?

(vl-string-search "essai" "essai avec le mot essai")

Renvoie 0 : car la chaîne débute par (recherche), l'enquête s'arrête dès qu'il en est trouvé une

(vl-string-search "essai" "essai avec le mot essai" 1)

Renvoie : 18, l'enquête commence après la première occurrence donc ce qu est renvoyé est le deuxième mot "essai" en position 18.

Haut de page


vl-string-subst

Changer une chaîne par une autre
(SUBSTitution)

Là aussi le titre est clair, on y va ...

Syntaxe  (vl-string-subst NewStr Modele Str [StartPos]

Arguments :
NewStr : une chaîne de caractères (string).
Modele : une chaîne de caractères (string).
Str : une chaîne de caractères (string).
StartPos : [facultatif] un nombre entier (integer) qui définit le départ de recherche de NewStr dans Str pour trouver l'occurrence (Modele).

Valeur renvoyée : La valeur de Str après que toutes les substitutions ont été faites.

Notez bien que la recherche est sensible à la casse
et que (vl-string-subst) substitue seulement la première occurrence trouvée dans la chaîne de caractères (string).

Exemples :

Remplacer "quode" par "code" dans "da-quode"

(vl-string-subst "code" "quode" "da-quode")

Renvoie : "da-code"

Remplacer "Quode" par "code" dans "da-Quode"

(vl-string-subst "code" "Quode" "da-quode")

Renvoie : "da-quode", la chaîne n'a pas subi de modification car Quode (Q Majuscule) n'a pas été trouvé dans la chaîne str à cause de la sensibilité à la casse de cette fonction (distinction entre les majuscules et les minuscules).

Remplacer "essai" par "test" dans "essai avec le mot essai"

(vl-string-subst "test" "essai" "essai avec le mot essai")

Renvoie : "test avec le mot essai",
Car bien qu'il y ait deux occurrences du mot "essai" dans la str à modifier la fonction (vl-string-subst) stoppe dès qu'une substitution a été effectuée.

(vl-string-subst "test" "essai" "essai avec le mot essai" 1)

En renseignant l'argument start-pos de façon à ce que (vl-string-subst) ignore la première position dans la chaîne str le deuxième mot "essai" est substitué

Haut de page


vl-string-translate

Remplacer des caractères d'une chaîne
par d'autres caractères spécifiés

Cette fonction peut sembler, a priori, faire doublon avec la précédente mais ce n'est pas tout à fait le cas car elle permet en fait de modifier des caractères elle aussi mais partout et n'importe où dans la chaîne choisie, c'est LA grosse différence.
Le nom de la fonction contient "translate" mais c'est une fausse information car il n'y a pas d'idée de "traduction" de chaîne de caractères, du moins dans le sens de langage véhiculaire voire vernaculaire.

Syntaxe : (vl-string-translate SourceSet DestSet Str )

Arguments :
SourceSet : Chaîne de caractères (string),
Caractères à substituer dans DestSet
DestSet : Chaîne de caractères (string),
Caractères à substituer à ceux de SourceSet  
Str 
: Chaîne de caractères (string),
La chaîne dans laquelle opérer les transformations

Valeur renvoyée : La chaîne Str modifiée de toutes les substitutions

Allez ! on passe aux exemples :

Remplacer les a, b et c par des x, y et z :

(vl-string-translate "abc" "xyz" "A est a, B est b, C est C")

Renvoie : "A est x, B est y, C est C" toutes les occurrences ont été modifiées

Attention à la puissance de cette fonction car la même demande de substitution mais dans une autre chaîne d'arrivée va provoquer des résultats inattendus :

(vl-string-translate "abc" "xyz" "A c'est a, B c'est b, C c'est C")

Renvoie : "A z'est x, B z'est y, C z'est C", car des "c" encapsulés ont été trouvés et donc modifiés !

Supprimer des accents :

(setq chainedep "écriture avec des ê, des ù, des ô")

Renvoie : "écriture avec des ê, des ù, des ô"

Traitement :

(setq chainearr (vl-string-translate "éêèùô" "eeeuo" chainedep))

Renvoie : "ecriture avec des e, des u, des o"


Haut de page

Retour menu Fonctions VL


20 avril 2018