Texte : Parcourir un texte mot par mot

Grâce à la fonction split() ou splitTokens(), on peut séparer un texte en petit morceaux et les stocker dans une variable tableau. Dans cet exemple on va afficher un texte long mot par mot.

Précédent | 16/16

Nous aurons besoin d’un texte long pour ce code. Dans mon essai, j’ai copié un conte de Hans Christian Andersen : Les habits neufs de l’empereur. J’ai simplement copié le texte du conte dans un document au format txt.

dans l’entête du script, on déclare une variable qui recevra le texte :

String lines[];

C’est une variable tableau (un array) comme l’indique les crochets, qui contiendra des chaines de caractère. Le S majuscule est important.
Dans le setup, je charge le texte dans cette variable :

lines = loadStrings("habits_neufs.txt");

Le texte est séparé par lignes (et pas par phrase !). Une ligne est tout ce qui se trouve avant un retour chariot. Mon texte contient 18 lignes.

Deux variables, ligne et mot, vont me permettre de parcourir le texte : ligne stocke la ligne actuellement lue, mot le mot actuellement lu.

A chaque fois que la fonction "draw() est appelée, le code lit la phrase en cours, et la sépare en mots, grâce à la fonction splitTokens :

String[] mots = splitTokens(ligne_courante, "!;,. ");

splitTokens() permet de faire une séparation sur base de plusieurs caractères, ce qui est bien dans mon exemple, puisque les virgules, les double points, les points d’exclamations ne doivent pas être considérés comme des mots, et être enlevés au besoin, et permettent de séparer chaque mot.

Il nous reste ensuite à afficher ce texte mot par mot en parcourant le tableau.

Voici le code minimal :

// lire le texte ligne par ligne et mot par mot
// déclaration des variables
int ligne=0;
int mot=0;
PFont myFont;
String lines[];

void setup() {
 size(600,400);
 lines = loadStrings("habits_neufs.txt");
 println("il y a " + lines.length + " lignes");
 myFont = createFont("Aller-Light", 24);
 textFont(myFont,24);
 textAlign(CENTER);
 fill(255);
}

void draw() {
 background(0);
 // lire la ligne courante
 String ligne_courante=lines[ligne];
 // separer en mots
 String[] mots = splitTokens(ligne_courante, ",. ");
 // selectionne le mot courant et l'afficher
 text(mots[mot],width/2,height/2);
 delay(500);
 mot++;   // preparer le mot suivant
 if (mot > mots.length -1) { // si la ligne est terminée
   mot=0;
   ligne++;
     if (ligne > lines.length-1) { // fin de la lecture, ici on reprend au début
     ligne=0;
   }
 }

Attention, il est nécessaire de créer la police, et placer le texte dans le même dossier avec le nom "habits_neufs.txt"