Règle des signes

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
mdanielm
Membre émérite
Membre émérite
Messages : 254
Enregistré le : mer. 11 déc. 2013 19:48
Status : Hors ligne

Re: Règle des signes

#21

Message par mdanielm »

J'ai fait ça:
; StringRegExpReplaceEx
Ex1()
Ex2()

func Ex1()
   ; Remplace "basic" ou "Basic" par "BASIC"
   ; Utilise la fonction interne StringUpper
   $in = "basic xxx Basic xxxxx BASic." & @crlf & _
        "xxxbasica basIC xxx."
   $regex = "(?i)\bbasic\b"
   $in = StringRegExpReplaceEx($in, $regex, "StringUpper")
   ConsoleWrite($in & @crlf)
EndFunc

func Ex2()
   ; Remplace une minuscule en début de phrase par une majuscule
   ; et réduit les espaces qui précèdent à un seul

   $in = "  le. corbeau. et. le. renard."
   $regex = "(^|\.) *?([a-z])"
   $in = StringRegExpReplaceEx($in, $regex, "UpCase",2)
   ConsoleWrite($in & @crlf)
EndFunc
func UpCase($ch0, $ch1, $ch2)
        ; 2 groupes capturés donc 3 paramètres avec $0
   ; $ch0 - match complet non utilisé
   ; $ch1 - un point ou rien: groupe capturé \1
   ; $ch2 - une minuscule : groupe capturé \2
   Return $ch1 & ($ch1="" ? @tab : " ") & StringUpper(StringRight($ch2,2))
EndFunc


func StringRegExpReplaceEx($in, $regex, $fonc, $nbGroupes=0)
   ; $in - chaîne d'entrée
   ; $regex - critère de recherche avec groupe(s) de capture
   ; $fonc - nom de la fonction de traitement des groupes de capture
   ; $nbGroupes - 0..9  nb de groupes capturées

   Local $replace="' & " & $fonc & "(""$0"") & '"
   for $i=1 to $nbGroupes
      $replace=StringReplace($replace,'")', '","$' & $i & '")')
   Next

   Return Execute("'" & StringRegExpReplace($in, $regex, $replace) & "'")
EndFunc
On pourrait même se passer du paramètre $nbGroupes en le calculant. Il faudrait trouver une regex qui calcule le nombre de groupes capturés dans $regex!!!
Par exemple:
 $in="(abc(?:def)gh((?:ijkl)mn))"
stringreplace(stringreplace($in, "(?", ""), '(', '')
ConsoleWrite("Nb de groupes numérotés: " & @extended & @crlf)

Avatar du membre
mikell
Modérateur
Modérateur
Messages : 6000
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Règle des signes

#22

Message par mikell »

Pour quoi faire ? comme dit jchd, "quand on a besoin de $1, $2, $3 ... on peut tout grouper dans une seule expression/fonction"

$gui = GuiCreate("constructeur Execute SRER", 950, 180, -1, 100)
GUISetFont(12, 400, 0, "Times New Roman", $gui, 5)
$input0 = GuiCtrlCreateInput("", 10, 10, 930, 25)
GuiCtrlCreateLabel("pattern", 20, 35, 100, 20)
GuiCtrlCreateLabel("remplacement (utiliser simples quotes)", 390, 35, 300, 20)
$input1 = GuiCtrlCreateInput("", 10, 55, 360, 25)
$input2 = GuiCtrlCreateInput("", 380, 55, 500, 25)
$btn = GuiCtrlCreateButton("go", 890, 55, 50, 25)
GuiCtrlCreateLabel("instruction", 20, 80, 100, 20)
$input3 = GuiCtrlCreateInput("", 10, 100, 930, 25)
GuiCtrlCreateLabel("résultat", 20, 125, 100, 20)
$input4 = GuiCtrlCreateInput("", 10, 145, 930, 25)
GuiSetState()

   GuiCtrlSetData($input0, "un deux trois $variable 123 quatre")
   GuiCtrlSetData($input1, "(\W*)(\w)(\w+)")
   GuiCtrlSetData($input2, "'$1' & StringUpper('$2') & '$3'")

While 1
  $msg = GuiGetMsg()
  If $msg = -3 Then Exit
  If $msg = $btn Then
   $tomatch = GuiCtrlRead($input1)
   $todo = GuiCtrlRead($input2)
      $s = GuiCtrlRead($input0)
   $instr = 'Execute("''" & StringRegExpReplace($s, "' & $tomatch & '", "'' & ' & $todo & ' & ''") & "''")'
   GuiCtrlSetData($input3, $instr)
   GuiCtrlSetData($input4, Execute($instr))
  EndIf
Wend
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )

Répondre