Aller au contenu

Découper un texte en plusieurs lignes !


Messages recommandés

Posté(e)

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

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

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.