Source: Scratch Wiki en français


Séparer les mots d'une suite de caractères


Dans ce tuto, nous allons prendre une suite de caractères (un texte) et nous allons mettre chaque mot de cette suite dans une liste. Ça peut sembler inutile, mais nous vous assurons qu'on peut en avoir besoin alors autant savoir le faire !

Principe

Normalement, votre texte contient plusieurs mots. Si ces derniers sont séparés par une espace (ce qui est assez courant, non ?) il va falloir que le script repère ceux-ci. Il doit donc parcourir le texte lettre par lettre en stockant celles-ci jusqu'à arriver à une espace, transférer alors les lettres stockées jusque-là et qui forment un mot dans une liste, puis recommencer jusqu'à la fin du texte.

Création du script

Les variables

C'était prévisible, il faut des variables. Voilà celles que vous devrez créer :

(compteur) // servira à indiquer quelle lettre du texte il faut examiner
(résultat) // servira à stocker les lettres examinées
(mots :: list) // la liste dans laquelle seront mis tous les mots obtenus

Lettre par lettre

Nous devons créer un script qui va tester lettre par lettre le texte. D'abord la première, puis la deuxième, la troisième, etc. Tant qu'il ne s'agit pas d'une espace, il la place dans la variable résultat et continue. Vous allez comprendre. Prenons comme exemple la phrase = « Bonjour ami scratcheur ». Donc, avec cette phrase exemple, résultat doit valoir « Bonjour » après la première espace.

Voilà un petit tableau pour comprendre l'utilité de compteur.

compteur lettre correspondante résultat
1 B B
2 o B + o = Bo
3 n Bo + n = Bon
4 j Bon + j = Bonj
5 o Bonj + o = Bonjo
6 u Bonjo + u = Bonjou
7 r Bonjou + r = Bonjour

compteur commence à 1 et augmente de 1 à chaque fois. Ah, avec compteur = 8, vous tombez sur une espace. C'est donc la fin du mot.

ajouter (1) à [compteur v]

Le script va se répéter lettre par lettre jusqu'à la fin du texte. Il nous faut donc une boucle et nous avons donc besoin du bloc longueur de () qui donne le nombre de caractères dans une chaîne donnée.

répéter (longueur de [Bonjour ami scratcheur]) fois
ajouter (1) à [compteur v]

Nous allons utiliser le bloc lettre () de () pour indiquer au script quel caractère du texte examiner. Si on regarde le tableau, la deuxième colonne correspond à :

(lettre (compteur) de [Bonjour ami scratcheur])

Soit ce caractère est une espace, soit ce n'en est pas un. Il nous faut donc le bloc Si () alors sinon pour que le script décide quoi faire ensuite selon le cas.

répéter (longueur de [Bonjour ami scratcheur]) fois
si <(lettre (compteur) de [Bonjour ami scratcheur]) = [ ]> alors
sinon
fin
ajouter (1) à [compteur v]

Nous allons maintenant utiliser le bloc regrouper () et () pour ajouter le caractère à la variable résultat dans le cas où ce n'est pas une espace.

répéter (longueur de [Bonjour ami scratcheur]) fois
si <(lettre (compteur) de [Bonjour ami scratcheur]) = [ ]> alors
sinon
mettre [résultat v] à (regrouper (résultat) et (lettre (compteur) de [Bonjour ami scratcheur]))
fin
ajouter (1) à [compteur v]

Par contre, dans le cas où le caractère examiné est une espace, il faut transférer le contenu de la variable dans la liste avant de la réinitialiser. Sans oublier de transférer une dernière fois le contenu de la variable lorsque le script arrive en fin de texte parce qu'en général un texte ne se termine pas par une espace.

répéter (longueur de [Bonjour ami scratcheur]) fois
si <(lettre (compteur) de [Bonjour ami scratcheur]) = [ ]> alors
ajouter (résultat) à [mots v]::list
mettre [résultat v] à []
sinon
mettre [résultat v] à (regrouper (résultat) et (lettre (compteur) de [Bonjour ami scratcheur]))
fin
ajouter (1) à [compteur v]
end
ajouter (résultat) à [mots v]::list

Il ne reste qu'à ajouter les blocs d'initialisation des variables :

supprimer tous les éléments de la liste [mots v]
mettre [résultat v] à []
mettre [compteur v] à [1]
répéter (longueur de [Bonjour ami scratcheur]) fois
si <(lettre (compteur) de [Bonjour ami scratcheur]) = [ ]> alors
ajouter (résultat) à [mots v]::list
mettre [résultat v] à []
sinon
mettre [résultat v] à (regrouper (résultat) et (lettre (compteur) de [Bonjour ami scratcheur]))
fin
ajouter (1) à [compteur v]
end
ajouter (résultat) à [mots v]::list

Ça marche ! Vous n'avez qu'à tester ;)


Utilisation

Une utilisation très fréquente de cette technique est le déchiffrement des listes cloud.


Cet article fait partie de la catégorie des tutos
Tous les articles de cette catégorie :