Chercher et remplacer dans un texte
Les traitements de texte ont tous une fonction « Rechercher et remplacer ». CoddyRun aussi ! Voyons comment trouver un morceau dans un texte, et comment le transformer.
Trouver une position
position(morceau, texte) renvoie l'endroit où le morceau commence dans le texte, ou 0 s'il n'y est pas :
phrase est un texte vaut 'Le hibou dort le jour'
affiche position('hibou', phrase) // 4
affiche position('jour', phrase) // 18
affiche position('chat', phrase) // 0
Rappel : dans un texte, la première lettre est à la position 1. Le résultat 0 signifie donc « introuvable ».
Attention à l'ordre des arguments : d'abord ce qu'on cherche, ensuite le texte dans lequel on cherche.
Couper un texte en deux
Une fois la position connue, copier extrait ce qui se trouve avant et après. Exemple : séparer le nom et le domaine d'une adresse de courriel, autour du @.
adresse est un texte vaut 'coddy@foret.fr'
coupe est un nombre vaut position('@', adresse)
si coupe = 0 alors
affiche 'Ce n’est pas une adresse valide.'
sinon
affiche 'Nom : ' + copier(adresse, 1, coupe - 1)
affiche 'Domaine : ' + copier(adresse, coupe + 1, longueur(adresse))
fin si
- avant le
@ : on part de 1 et on prend coupe - 1 caractères ; - après le
@ : on part de coupe + 1 et on prend tout le reste. Demander plus de caractères qu'il n'en reste n'est pas un problème : copier s'arrête à la fin du texte.
Question : Dans 'bonjour', que renvoie position('jour', 'bonjour') ? — 4. b-o-n occupent les positions 1 à 3 ; « jour » commence à la position 4.
Remplacer
remplacer(texte, ancien, nouveau) remplace toutes les apparitions d'un morceau :
phrase est un texte vaut 'Le chat regarde le chat du voisin'
affiche remplacer(phrase, 'chat', 'hibou')
// Le hibou regarde le hibou du voisin
Comme toutes les fonctions de texte, remplacer renvoie un nouveau texte : la variable phrase n'est pas modifiée. Pour garder le résultat, on écrit phrase vaut remplacer(phrase, ...).
Retirer
retirer(texte, morceau) supprime toutes les apparitions d'un morceau. Pratique pour nettoyer une saisie :
telephone est un texte vaut '06 12 34 56 78'
telephone vaut retirer(telephone, ' ')
affiche telephone // 0612345678
affiche longueur(telephone) // 10
Et pour vérifier un numéro : après nettoyage, il doit contenir exactement 10 chiffres.
fonction estTelephone(saisi)
propre est un texte
propre vaut retirer(retirer(saisi, ' '), '.')
retourne longueur(propre) = 10 et longueur(chiffres(propre)) = 10
fin fonction
affiche estTelephone('06 12 34 56 78') // vrai
affiche estTelephone('06.12.34.56.78') // vrai
affiche estTelephone('06 12 34') // faux
affiche estTelephone('zéro six douze') // faux
chiffres ne garde que les chiffres : si la longueur reste 10, c'est que tout était des chiffres.
Remplir un modèle
Une lettre type contient des mots à remplacer. On écrit le modèle une fois, puis on le personnalise pour chaque personne :
modele est un texte vaut 'Bonjour PRENOM, ton rendez-vous est JOUR à HEURE.'
prenoms est un tableau vaut ['Léa', 'Tom', 'Inès']
jours est un tableau vaut ['lundi', 'mardi', 'jeudi']
horaires est un tableau vaut ['9 h', '14 h', '16 h 30']
message est un texte
pour i de 0 à longueur(prenoms) - 1
message vaut remplacer(modele, 'PRENOM', prenoms[i])
message vaut remplacer(message, 'JOUR', jours[i])
message vaut remplacer(message, 'HEURE', horaires[i])
affiche message
fin pour
Trois messages personnalisés, à partir d'un seul modèle. C'est le principe du publipostage.
En résumé
position(morceau, texte) : où commence le morceau, ou 0 s'il est absent.copier avant et après une position coupe un texte en deux.remplacer et retirer renvoient un nouveau texte : on range le résultat.- Un modèle et quelques
remplacer produisent des textes personnalisés.