Formater une phrase en plusieurs lignes

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Formater une phrase en plusieurs lignes

#1

Message par walkson »

Bonjour,
Je souhaite formater une phrase qui est d'une ligne (pas de retour de chariot) en plusieurs lignes pour pouvoir la lire dans un Tooltip()
J'ai essayé plusieurs méthodes dont la moins pire est celle-ci
#include <Array.au3>
$a = "Monsieur Louis DUPONT a souhaité que lui soit transféré sur son compte titres, la quote-part lui revenant dans les titres ; il lui a été transféré à ce titre pour une valeur de 4501,32€"

$regex = "([^" & Chr(32) & "]{1,50})+"
$rep = StringRegExp($a,$regex,3)
_ArrayDisplay($rep)
Local $convert, $y = 1
For $i = 0 To UBound($rep) - 1
   $convert &= $rep[$i] & " "
   If $y = 8 Then
      $convert = $convert  & @CRLF
      $y = 0
   EndIf
   $y += 1
Next
ToolTip($convert,150,400,"info",0,2)
MsgBox(0,"",$convert)
Dans le cas présent, il y a une ligne tous les 8 mots
Je pense qu'il y a moyen de faire plus simple mais je ne trouve pas :(
Merci de votre aide
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Formater une phrase en plusieurs lignes  

#2

Message par orax »

Code : Tout sélectionner

$a = "Monsieur Louis DUPONT a souhaité que lui soit transféré sur son compte titres, la quote-part lui revenant dans les titres ; il lui a été transféré à ce titre pour une valeur de 4501,32€"
$convert = _wrapByRegex(50, $a)
ToolTip($convert, 150, 400, "info", 0, 2)
MsgBox(0, "", $convert)

Func _wrapByRegex($n, $s)
	Return StringRegExpReplace($s, "(.{1," & $n & "})(\s|$)", "\1" & @CRLF)
	
	; ou comme ci-dessous pour garder l'espace avant le retour à la ligne
	;Return StringRegExpReplace($s, "(.{1," & $n & "})(\s|$)", "\1\2" & @CRLF)
EndFunc   ;==>_wrapByRegex
J'ai simplement copié un des codes en Javascript sur https://rosettacode.org/wiki/Word_wrap#Simple_regex
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: Formater une phrase en plusieurs lignes

#3

Message par mdanielm »

@orax
C'est une solution rudimentaire qui brille par sa simplicité mais comme tu peux voir ci dessous, il faudrait mesurer les caractères.
Etudie le code suivant:
$a = "Monsieur Louis DUPONT a souhaité que lui soit transféré sur son compte titres, la quote-part lui revenant dans les titres; il lui a été transféré à ce titre pour une valeur de 4501,32€"
$convert = _wrapByRegex(60, $a)  ; J'ai mis 60 au lieu de 50
ToolTip($convert, 150, 400, "info", 0, 2)

;$convert = _wrapByRegex(60, $a)
$b = "Monsieur Louis DUPONT a souhaité que lui soit transféré sur" & @crlf & _
     "son compte titres, la quote-part lui revenant dans les titres;" & @crlf & _
    "il lui a été transféré à ce titre pour une valeur de 4501,32€"

MsgBox(0, "", $b)

Func _wrapByRegex($n, $s)
   Return StringRegExpReplace($s, "(.{1," & $n & "})(\s|$)", "\1" & @CRLF)

   ; ou comme ci-dessous pour garder l'espace avant le retour à la ligne
   ;Return StringRegExpReplace($s, "(.{1," & $n & "})(\s|$)", "\1\2" & @CRLF)
EndFunc   ;==>_wrapByRegex
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Formater une phrase en plusieurs lignes

#4

Message par walkson »

Bonjour,
Merci pour vos réponses
C'est une solution rudimentaire qui brille par sa simplicité
et c'est bien ce qu'il me plait :mrgreen:
Ce texte sera toujours court car il est un résumé du contenu d'un fichier. Il apparait au passage de la souris sur une listview avec d'autres infos
J'avais d'autres possibilités comme _StringSize() de Melba23 ou plus simplement
Global $Edit1 = GUICtrlCreateEdit("", 0, 0, 176, 100,BitOR($ES_MULTILINE,$WS_VSCROLL,$ES_READONLY))
GUICtrlSetData(-1, $a)
avec une GUI en $WS_POPUP (valable pour un texte long) mais je perdais en souplesse par rapport à un Tooltip()
La proposition d'Orax me convient parfaitement
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Formater une phrase en plusieurs lignes

#5

Message par orax »

mdanielm a écrit : sam. 03 mars 2018 09:28[...] il faudrait mesurer les caractères.
La largeur qu'occupe chaque caractère (la chasse) ? Le résultat me semble pourtant correct.

Code : Tout sélectionner

Monsieur Louis DUPONT a souhaité que lui soit transféré sur
son compte titres, la quote-part lui revenant dans les titres;
il lui a été transféré à ce titre pour une valeur de 4501,32€
Dans le texte suivant, la largeur d'une ligne fait, au maximum, 60 caractères.

Code : Tout sélectionner

Monsieur Louis DUPONT a souhaité que lui soit transféré sur
son compte titres, la quote-part lui revenant dans les
titres;
il lui a été transféré à ce titre pour une valeur de
4501,32€
J'admets que l'aspect n'est pas esthétique, mais c'est le résultat que j'attends.
Il y a quand même un problème avec l'expression régulière. Le code suivant n'affiche pas le résultat attendu, il y a deux retour à la ligne au lieu d'un seul. :?

Code : Tout sélectionner

$b = "Monsieur Louis DUPONT a souhaité que lui soit transféré sur" & @CRLF & _
		"son compte titres, la quote-part lui revenant dans les titres;" & @CRLF & _
		"il lui a été transféré à ce titre pour une valeur de 4501,32€"
$convert = _wrapByRegex(60, $b)
MsgBox(0, "", $convert)
Func _wrapByRegex($n, $s)
	Return StringRegExpReplace($s, "(.{1," & $n & "})(\s|$)", "\1" & @CRLF)
EndFunc   ;==>_wrapByRegex
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Formater une phrase en plusieurs lignes

#6

Message par mikell »

@orax
"(.{1," & $n & "})(\s+|$)"
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Formater une phrase en plusieurs lignes

#7

Message par orax »

Bien vu ! :mrgreen:
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Répondre