Aller au contenu
4rno

Découper un texte en plusieurs lignes !

Messages recommandés

Bonjour !

 

Suite à une demande d'aide, j'ai réalisé une petite fonction qui peut s'avérer très utile !

 

Elle permet de découper un texte de façon relativement propre, en essayant de ne pas couper les mots si c'est possible.

 

Tuske permet, en théorie, de faire la même chose, mais il semble que cette fonctionnalité soit cassée chez certains :/ Cette fonction ci permet donc de pallier à ce problème !

 

Voici le code:

function splitText(text: text, dist: integer=50) :: texts:
   set {_text::*} to {_text} split by ""
   set {_pos} to {_dist}
   set {_ok} to false
   while {_ok} is not true:
       set {_posok} to false
       while {_posok} is not true:
           if {_text::%{_pos}%} is " ":
               set {_posok} to true
           else:
               remove 1 from {_pos}
           set {_c} to (amount of {_pos::*})
           if {_pos} is {_pos::%{_c}%}:
               set {_pos} to {_pos::%{_c}%}+{_dist}
               set {_posok} to true
           if {_pos} is 1:
               set {_pos} to {_pos::%{_c}%}+{_dist}
               set {_posok} to true
       add {_pos} to {_pos::*}
       set {_pos} to {_pos}+{_dist}+1
       if {_pos} > amount of {_text::*}:
           set {_ok} to true
           add amount of {_text::*} to {_pos::*}
   set {_pos::0} to 0
   loop (amount of {_pos::*}) times:
       add subtext of {_text} between index {_pos::%(loop-value)-1%}+1 and {_pos::%loop-value%} to {_return::*}
   return {_return::*}

Pour l'utiliser, il suffit de faire

splitText(<texte>,<Longueur maximale de chaque partie du texte>)

Elle renverra alors une liste contenant le texte découpé.

 

Son fonctionnement n'est pas très compliqué. La fonction va d'abord découper le texte demandé à chaque caractère (de cette façon, je peux vérifier à quoi correspond le 16e caractère par exemple). À partir de là, je vais tester si le caractère à la position de la découpe demandée est un espace. Si c'est le cas, c'est bon je sais que je peux split mon texte directement à cette position; sinon je vais diminuer de 1 ma position jusqu'à trouver un espace. Dans le cas où il y a une trèèsss looonnng mot, je teste par précaution si je ne suis pas retombé sur la position de mon split précédent. Alors là seulement je vais devoir découper le mot en 2.

Je continue cette opération autant de fois que nécessaire pour que le nombre de caractères restants est plus petit que la longueur maximale autorisée.

 

Voici un petit exemple :

send splitText("Bonjour je suis un message de test, je vous en prie, testez moi !Je vais être découpé en plein de petits morceaux ^^", 30)

[ATTACH=full]7208[/ATTACH]

 

 

Ou en plus long (là je n'ai pas indiqué de longueur maximale, celle par défaut est de 50):

send splitText("Bonjour je suis un message de test, je vous en prie, testez moi !Je vais être découpé en plein de petits morceaux ^^")

[ATTACH=full]7209[/ATTACH]

 

 

 

Bonne utilisation !

4rno

  • J'aime 1

Partager ce message


Lien à poster
Partager sur d’autres sites
Invité
Vous postez un commentaire en tant qu’invité. Si vous avez un compte, merci de vous connecter.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.


×

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer.