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 :mrgreen:

Re: [..] n Macro

Posté : mer. 26 déc. 2018 20:36
par walkson
Y a ce truc là aussi
 For $i = 0 To 4
 Send(@DocumentsCommonDir &" "& @MON &"\"& @YEAR & @CRLF, 0)
 Next
Mais attention ! ça tire dans les coins :P

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