Bonsoir à tous,
Quelqu'un connaît-il la syntaxe correcte à utiliser ci dessous?
[codeautoit]$ch = "bonjour,... toi"
$regex = '(\w+)([^\w]*)(\w+)'
$ch = StringRegExpReplace($ch, $regex, StringUpper("$1") & "$2" & "$3")
MsgBox(0, "", $ch)[/codeautoit]
StringRegExpReplace avec fonction
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
Re: StringRegExpReplace avec fonction
On ne peut pas utiliser de fonction de cette façon, en tout cas pas à ma connaissance.
Tu peux faire comme ça :
[codeautoit]$ch = "bonjour,... toi"
$regex = '(\w+)([^\w]*\w+)'
$ch = Execute(StringRegExpReplace($ch, $regex, "StringUpper('$1') & '$2'"))
MsgBox(0, "", $ch)[/codeautoit]
Tu peux faire comme ça :
[codeautoit]$ch = "bonjour,... toi"
$regex = '(\w+)([^\w]*\w+)'
$ch = Execute(StringRegExpReplace($ch, $regex, "StringUpper('$1') & '$2'"))
MsgBox(0, "", $ch)[/codeautoit]
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
- orax
- Modérateur
- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: StringRegExpReplace avec fonction
J'ai été confronté à ce problème il y a peu de temps. Je voulais utiliser "
[codeautoit]$ch = StringRegExpReplace($ch, "\w+", "\U\0")[/codeautoit]
Ça fonctionne dans Notepad++ [1], par contre, dans AutoIt, \U ne semble pas être pris en compte, et je n'avais pas trouvé d'équivalent pour faire ça.
Mais avec la solution de jguinch, tu devrais pouvoir faire la même chose.
\U
" pour mettre en majuscule certains mots, comme dans le code ci-dessous.[codeautoit]$ch = StringRegExpReplace($ch, "\w+", "\U\0")[/codeautoit]
Ça fonctionne dans Notepad++ [1], par contre, dans AutoIt, \U ne semble pas être pris en compte, et je n'avais pas trouvé d'équivalent pour faire ça.
Mais avec la solution de jguinch, tu devrais pouvoir faire la même chose.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Re: StringRegExpReplace avec fonction
Merci,
Je cherche maintenant une solution pour le cas les groupes ne recouvrent pas la chaîne:
$ch = "<Bonjour,... toi !!!>"
Je cherche maintenant une solution pour le cas les groupes ne recouvrent pas la chaîne:
$ch = "<Bonjour,... toi !!!>"
- orax
- Modérateur
- Messages : 1479
- Enregistré le : lun. 23 mars 2009 04:50
- Localisation : ::1
- Status : Hors ligne
Re: StringRegExpReplace avec fonction
Là ça ne marche plus parce qu'Execute essaie d'exécuter
On pourrait corriger le problème, mais j'ai voulu essayer une autre méthode.
Je me suis inspiré du code ici.
[codeautoit]#include <StringConstants.au3>
$ch = "<Bonjour,... toi !!!>"
$regex = '(\w+)[^\w]*\w+'
$iOffset = 1
Do
$aRes = StringRegExp($ch, $regex, $STR_REGEXPARRAYFULLMATCH, $iOffset)
If @error Then ExitLoop
$iOffset = @extended
$ch = StringReplace($ch, $iOffset - StringLen($aRes[0]), StringUpper($aRes[1]), 1, 1)
Until 0
ConsoleWrite($ch & @CRLF)[/codeautoit]
<StringUpper('Bonjour') & ',... toi' !!!>
.On pourrait corriger le problème, mais j'ai voulu essayer une autre méthode.
Je me suis inspiré du code ici.
[codeautoit]#include <StringConstants.au3>
$ch = "<Bonjour,... toi !!!>"
$regex = '(\w+)[^\w]*\w+'
$iOffset = 1
Do
$aRes = StringRegExp($ch, $regex, $STR_REGEXPARRAYFULLMATCH, $iOffset)
If @error Then ExitLoop
$iOffset = @extended
$ch = StringReplace($ch, $iOffset - StringLen($aRes[0]), StringUpper($aRes[1]), 1, 1)
Until 0
ConsoleWrite($ch & @CRLF)[/codeautoit]
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Re: StringRegExpReplace avec fonction
Bravo, c'est mieux.
Pour moi $ch a 10000 caractères, par exemple une page .htm de l'aide AutoIt et la fonction StringUpper est en fait une fonction perso complexe.
Ta solution fonctionne mais j'ai une autre idée sans boucle:
Comme j'ai plusieurs remplacement à faire avec la même fonction, je fais tous les remplacements en une fois par le nom de la fonction, puis en une fois avec StringReplace je remplace les noms de la fonctions par la valeur qu'elle retourne. pb de param?
Dès que j'ai le temps, je réfléchis mieux!.
Bonne journée
Pour moi $ch a 10000 caractères, par exemple une page .htm de l'aide AutoIt et la fonction StringUpper est en fait une fonction perso complexe.
Ta solution fonctionne mais j'ai une autre idée sans boucle:
Comme j'ai plusieurs remplacement à faire avec la même fonction, je fais tous les remplacements en une fois par le nom de la fonction, puis en une fois avec StringReplace je remplace les noms de la fonctions par la valeur qu'elle retourne. pb de param?
Dès que j'ai le temps, je réfléchis mieux!.
Bonne journée
Re: StringRegExpReplace avec fonction
[codeautoit]$ch = "<Bonjour,... toi !!!>"
$regex = '(\w+)([^\w]*\w+)'
$ch = Execute('"' & StringRegExpReplace(StringReplace($ch, '"', '""'), $regex, """ & StringUpper('$1') & ""$2") & '"')
MsgBox(0, "", $ch)[/codeautoit]
$regex = '(\w+)([^\w]*\w+)'
$ch = Execute('"' & StringRegExpReplace(StringReplace($ch, '"', '""'), $regex, """ & StringUpper('$1') & ""$2") & '"')
MsgBox(0, "", $ch)[/codeautoit]
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Re: StringRegExpReplace avec fonction
Je n ai pas d ordinateur sous la main pour apprecier mais c est spectaculaire.
Pourquoi pas une fonction StringRegExpReplace2($ch, $regex, 'MyFunc') ?
Ou MyFunc aurait autant de paramètres que de groupes de capture.
Exemple:
Func MyFunc($c1, $c2, $c3)
Return StringUpper($c1) & $c2 & StringReverse($c3)
endFunc
Pourquoi pas une fonction StringRegExpReplace2($ch, $regex, 'MyFunc') ?
Ou MyFunc aurait autant de paramètres que de groupes de capture.
Exemple:
Func MyFunc($c1, $c2, $c3)
Return StringUpper($c1) & $c2 & StringReverse($c3)
endFunc