[R] n Macro

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 781
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

[R] n Macro

#1

Message par DimVar » mer. 26 déc. 2018 10:36

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.
Modifié en dernier par DimVar le sam. 29 déc. 2018 11:03, modifié 1 fois.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Contact :
Status : Hors ligne

Re: [..] n Macro

#2

Message par orax » mer. 26 déc. 2018 12:31

Je ne connais pas de syntaxe particulière pour faire ça, mais on peut utiliser _StringRepeat.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 781
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: [..] n Macro

#3

Message par DimVar » mer. 26 déc. 2018 14:05

Merci Orax pour cette function.
Je laisse ouvert le sujet néanmoins. Je continue à chercher de mon coté.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 781
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: [..] n Macro

#4

Message par DimVar » mer. 26 déc. 2018 14:18

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.
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Contact :
Status : Hors ligne

Re: [..] n Macro

#5

Message par orax » mer. 26 déc. 2018 15:44

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.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)

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

Re: [..] n Macro

#6

Message par mikell » mer. 26 déc. 2018 19:09

orax a écrit :
mer. 26 déc. 2018 12:31
on peut utiliser _StringRepeat
Je crois que c'est très exactement ce qu'en penseraient les développeurs :mrgreen:
" 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
walkson
Modérateur
Modérateur
Messages : 680
Enregistré le : ven. 12 août 2011 18:49
Localisation : Essonne
Status : Hors ligne

Re: [..] n Macro

#7

Message par walkson » mer. 26 déc. 2018 20:36

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
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi

Avatar du membre
DimVar
Niveau 10
Niveau 10
Messages : 781
Enregistré le : ven. 30 mai 2008 14:08
Status : Hors ligne

Re: [..] n Macro

#8

Message par DimVar » ven. 28 déc. 2018 10:09

Euh, pas compris !?
N'évoquons pas la pierre, les jeunes risqueraient d'en poire !

Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11399
Enregistré le : ven. 20 juil. 2007 20:00
Localisation : Bordeaux
Status : Hors ligne

Re: [R] n Macro

#9

Message par Tlem » dim. 30 déc. 2018 12:26

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
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".

Répondre