Assembler un texte àpartir de 3 sources différentes

Un script simple pour assembler des portions de texte provenant de 3 sources différentes.

Ce code utilise les StringList, qui permettent une manipulation plus facile des Strings que les simples variables tableaux : la fonction shuffle() permet un mélange des Strings, et remove() permet de supprimer la String déjàutilisée.

Ça donne ceci en terme de code :

String petit="lion_en_societe.txt";
String moyen="loup_chien.txt";
String grand="mouche_lion.txt";

// la stringlist de textes récupérés
StringList mix;
//Les 3 textes sous forme de stringlist aussi
StringList t1;
StringList t2;
StringList t3;

void setup() {
  size(600, 800);
}

void draw() {
  // on recharge les textes à chaque tour, sinon la liste se vide au fur et à mesure
  // remplir la première stringlist
  t1=new StringList();
  t1 = remplit(t1, petit);
  // remplir la deuxième stringlist
  t2=new StringList();
  t2 = remplit(t2, moyen);
  // remplir la troisième stringlist
  t3=new StringList();
  t3 = remplit(t3, grand);

  background(255);
  fill(0);

  // initaliser la stringlist
  mix = new StringList();

  for (int i=0; i<2; i++) {
    mix.append(portion(t1)); //appel de fonction
  }
  for (int i=0; i<3; i++) {
    mix.append(portion(t2)); //appel de fonction
  }
  for (int i=0; i<5; i++) {
    mix.append(portion(t3)); //appel de fonction
  }
  mix.shuffle();

  // mettre ça dans un array traditionnel
  String[] textes = mix.array();
  // transformer l'array en une seule string
  String resultat = join(textes, "\n");

  textSize(10);
  text(resultat, 20, 20, width-40, height);

  // saveFrame();
  noLoop();
}

String portion(StringList lequel) {
  String retour="";
    int phasard=int(random(lequel.size()));
    retour=lequel.get(phasard);
    // enlever l'élément utilisé de la StringList
    lequel.remove(phasard);
    println("la stringlist fait maintenant "+lequel.size());
  return retour;
}

// remplit les stringlists avec les textes
StringList remplit(StringList s, String t) {
  String[] t_complet=loadStrings(t);
  for (int i=0; i<t_complet.length; i++) {
    s.append(t_complet[i]);
  }
  println(t+" a maintenant "+s.size()+" lignes");
  return s;
}

void keyPressed() {
  loop();
}