1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| var
chaine_depart: string; // Variable uniquement pour les tests
wordlist : TStringList; // StringList contenant le résultat
currentword: string; // Variable intermédiare contenant le mot (d'au plus 8 caractères) à insérer dans la liste de résultat
i,j: integer; // Variables internes
begin
wordlist := TStringList.create;
try
// On rempli la chaine de test avec des valeurs bidons
chaine_depart := 'Nolween Leroy - Testgrandmot - Nolween Ohwolulio';
// On ajoute un espace à la fin de la chaine à manipuler. Si on ne le fait pas, on risque de ne pas prendre en compte le dernier mot!
chaine_depart := chaine_depart + ' ';
j := 1;
// Boucle qui va scruter la chaine à découper
repeat
// i représente la position du prochain caractère espace trouvé
// j représente la position du dernier caractère traité
// PosEx va chercher, à partir de j (initialisé à 1, début de la chaine au départ) la position du prochain caractère espace
i := PosEx(' ', chaine_depart, j);
// Si i - j est supérieur à 8, on est tombé sur un mot de plus de 8 caractères
if ((i - j) > 8) then
begin
// Dans ce cas, on copie les 8 premiers caractères uniquement (on tronque le mot)
currentword := copy(chaine_depart, j, 8);
// Et on incrément notre variable j pour indiquer, à la prochaine boucle, où il faut reprendre le traitement
j := j + 8;
end
else // Sinon, on est tombé sur un mot de 8 caractères ou moins
begin
// Dans ce cas, on copie les caractères jusqu'à la position de notre espace, soit à partir de j jusque (i - j)
currentword := copy(chaine_depart, j, (i - j));
// Enfin, on incrémente j pour 'sauter' le caractère espace qui ne nous intéresse plus pour traiter la suite de la chaine
j := i + 1;
end;
// Enfin, on peut insérer dans notre liste 'résultat' le mot / groupe de caractères trouvé!
wordlist.Add(currentword);
until (i = 0); // Si PosEx renvoie 0, c'est que la recherche fut infructueuse! C'est en partie pour ça qu'il faut ajouter un espace à la fin de la chaine de test pour traiter le dernier mot |
Partager