Page 1 sur 1
[R] n Macro
Posté : mer. 26 déc. 2018 10:36
par DimVar
Bonjour,
Je cherche à préciser dans un script, plusieurs macro simultanées. Je l'ai déjà fait auparavant, mais plus moyen de retrouver la syntaxe.
EX :
$toto = 'bla bla bla' & @crlf & @crlf & @crlf & @crlf & @crlf & @crlf & @crlf
Je voudrais dans l'exemple ci-dessus, remplacer les n @crlf par un truc du genre {n}@crlf.
Si qqun à l'astuce.
Sinon Joyeuses fêtes à tou(te)s.
Re: [..] n Macro
Posté : mer. 26 déc. 2018 12:31
par orax
Je ne connais pas de syntaxe particulière pour faire ça, mais on peut utiliser _StringRepeat
.
Re: [..] n Macro
Posté : mer. 26 déc. 2018 14:05
par DimVar
Merci Orax pour cette function.
Je laisse ouvert le sujet néanmoins. Je continue à chercher de mon coté.
Re: [..] n Macro
Posté : mer. 26 déc. 2018 14:18
par DimVar
Arf, je pense que je confonds avec ce que j'ai deja pu utiliser, à savoir les paramètres de la fonction Send.
Du genre : Send ("{ALT 4}")
Je pensais à tort que l'on pouvait faire un truc du genre {@macro 4}, qui répéterait 4 fois la macro choisie.
Trouveriez-vous cela pratique si cela existait ? Peut on soumettre ça aux développeurs d'Auto-it pour une prochaine version ?
Merci.
Re: [..] n Macro
Posté : mer. 26 déc. 2018 15:44
par orax
C'est vrai que parfois c'est pratique. Il y a des langages qui permettent de le faire. Voir la page
https://rosettacode.org/wiki/Repeat_a_string à ce sujet. Mais je ne sais pas ce qu'en penseraient les développeurs.
Re: [..] n Macro
Posté : mer. 26 déc. 2018 19:09
par mikell
orax a écrit : ↑mer. 26 déc. 2018 12:31on peut utiliser
_StringRepeat
Je crois que c'est très exactement ce qu'en penseraient les développeurs
Re: [..] n Macro
Posté : mer. 26 déc. 2018 20:36
par walkson
Y a ce truc là aussi
Mais attention ! ça tire dans les coins
Re: [..] n Macro
Posté : ven. 28 déc. 2018 10:09
par DimVar
Euh, pas compris !?
Re: [R] n Macro
Posté : dim. 30 déc. 2018 12:26
par Tlem
Bonjour.
La solution la plus simple serait de faire comme mikel vous l'a conseillé :
Code : Tout sélectionner
#include <String.au3>
$toto = 'bla bla bla' & _StringRepeat(@CRLF, 7)
Si le fait d'inclure la librairie String.au3 vous pose problème, vous pouvez simplement rajouter la fonction _StringRepeat() à votre script :
Code : Tout sélectionner
$toto = 'bla bla bla' & LocalStringRepeat(@CRLF, 7)
Func LocalStringRepeat($sString, $iRepeatCount)
; Casting Int() takes care of String/Int, Numbers.
$iRepeatCount = Int($iRepeatCount)
If $iRepeatCount = 0 Then Return "" ; Return a blank string if the repeat count is zero.
; Zero is a valid repeat integer.
If StringLen($sString) < 1 Or $iRepeatCount < 0 Then Return SetError(1, 0, "")
Local $sResult = ""
While $iRepeatCount > 1
If BitAND($iRepeatCount, 1) Then $sResult &= $sString
$sString &= $sString
$iRepeatCount = BitShift($iRepeatCount, 1)
WEnd
Return $sString & $sResult
EndFunc ;==>LocalStringRepeat
Après, si vous vous moquez de la possibilité de choisir le caractère à répéter et que les tests d'erreurs ne vous concernent pas, vous pouvez épurer le code comme ceci :
Code : Tout sélectionner
$toto = 'bla bla bla' & MultiCRLF(7)
Func MultiCRLF($iRepeatCount = 2)
Local $sResult = "", $sString = @CRLF
While $iRepeatCount > 1
If BitAND($iRepeatCount, 1) Then $sResult &= $sString
$sString &= $sString
$iRepeatCount = BitShift($iRepeatCount, 1)
WEnd
Return $sString & $sResult
EndFunc
ou encore avec une boucle For/Next comme a voulu vous le montrer Walkson :
Code : Tout sélectionner
$toto = 'bla bla bla' & MultiCRLF(7)
Func MultiCRLF($iRepeatCount = 2)
Local $sString
For $i = 1 To $iRepeatCount
$sString &= @CRLF
Next
Return $sString
EndFunc