De Scratch Wiki en français

Révision datée du 9 avril 2021 à 22:35 par Theo 1er (discussion | contributions) (corrections orthographiques)


Différencier les mots d'une suite de caractères


Hey !

Vous avez compris le titre ? Non ? Ah bon.

Disons que dans ce tuto, nous allons prendre une suite de caractères (par exemple, "ceci est une suite de caractères", bref un texte) et nous allons mettre chaque mot de cette suite dans une liste. Ça peut sembler inutile mais je vous assure 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 un 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 à un 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'un 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 le premier 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 un 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 un 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 un 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 un 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 un espace.

répéter (longueur de [Bonjour ami scratcheur]) fois
si <(lettre (compteur) de [Bonjour ami scratcheur]) = [ ]> alors
ajouter (résultat) à [mots v]
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]

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]
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]

Ç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 :
Les cookies nous aident à fournir nos services. En utilisant nos services, vous acceptez notre utilisation des cookies.