Page 1 sur 1
[Func] RandomLettre (Générer une lettre)
Posté : ven. 16 avr. 2010 15:06
par alex1205
Bonjour, travaillant nuit et jour, je viens de mettre au point une fonction (avec l'aide de GMib) servant à générer une lettre au hasard.
Code de la fonction:
Code : Tout sélectionner
Func RandomLettres($strMin = "a", $strMax = "z", $szNb = 1, $szType = 0)
Local $i, $Char
For $i = 1 to $szNb
If $szType = 1 Then
$Char &= StringUpper(Chr(Random (Asc($strMin), Asc($strMax), 1)))
ElseIf $szType = 2 Then
If Random (0, 1, 1) = 0 Then
$Char &= Chr(Random (Asc($strMin), Asc($strMax), 1))
Else
$Char &= StringUpper(Chr(Random (Asc($strMin), Asc($strMax), 1)))
EndIf
Else
$Char &= Chr(Random (Asc($strMin), Asc($strMax), 1))
EndIf
Next
Return $Char
EndFunc
Exemple:
Code : Tout sélectionner
$exemple = RandomLettre("a","z", 2, 2)
Msgbox(0, "", $exemple & "ce sont le deux lettres choisi par RandomLettre")
Alex1205
Re: [Func] RandomLettre (Générer une lettre)
Posté : ven. 16 avr. 2010 17:12
par Tlem
Votre exemple n'est pas juste, car les lettres a et z doivent être entre guillemets.
Ensuite, tant qu'à faire une fonction de ce type, en voici une plus évoluée qui correspondrait un peut plus au nom de la fonction (mais on peut faire très largement encore mieux

) :
Code : Tout sélectionner
; Exemple 1
Msgbox(0, "Une lettre entre a et z", RandomLettre())
; Exemple 2
Msgbox(0, "Une lettre entre g et V", RandomLettre("g","v"))
; Exemple 3
Msgbox(0, "Cinq lettres entre a et z", RandomLettre("a","z", 5))
Func RandomLettre($strMin = "a", $strMax = "z", $szNb = 1)
Local $i, $Char
For $i = 1 to $szNb
$Char &= Chr(Random (Asc($strMin), Asc($strMax), 1))
Next
Return $Char
EndFunc
Re: [Func] RandomLettre (Générer une lettre)
Posté : sam. 17 avr. 2010 00:44
par GaRydelaMer
Bonsoir
je me pose une question avec votre code, comment vous gérer les lettres en majuscules ?
Genre: RandomLettres("e", "E", 5) ou RandomLettres("a", "Z", 2)
J'ai pas tester le code juste pour alimenter le schimilmilililimmimiblick
@Tlem, j'ai mis un "s" à la fin du nom de la fonction pour prendre en compte le paramètre que tu as ajouté

Re: [Func] RandomLettre (Générer une lettre)
Posté : sam. 17 avr. 2010 11:11
par Tlem
La question des majuscules n'a pas été abordée. Mais si cela devait être fait, puisque entre les majuscules et les minuscules il y a quelques caractères qui nous gêne, on peut tout simplement gérer une variable supplémentaire qui donnerait pour choix : 0 = minuscule, 1 = majuscule, 2 = Mixte
Ensuite l'utilisation de condition pour gérer tout ca, et le tour est joué.
Ca donnerait ceci (avec le 's' rajouté)

:
► Afficher le texte
Code : Tout sélectionner
; Exemple 1
Msgbox(0, "Une lettre entre a et z", RandomLettres())
; Exemple 2
Msgbox(0, "Une lettre entre g et V", RandomLettres("g","v"))
; Exemple 3
Msgbox(0, "Cinq lettres entre a et z", RandomLettres("a","z", 5))
; Exemple 4
Msgbox(0, "Cinq lettres entre a et z majuscule", RandomLettres("a","z", 5, 1))
; Exemple 5
Msgbox(0, "Quinze lettres entre a et z Maj/Min", RandomLettres("a","z", 15, 2))
Func RandomLettres($strMin = "a", $strMax = "z", $szNb = 1, $szType = 0)
Local $i, $Char
For $i = 1 to $szNb
If $szType = 1 Then
$Char &= StringUpper(Chr(Random (Asc($strMin), Asc($strMax), 1)))
ElseIf $szType = 2 Then
If Random (0, 1, 1) = 0 Then
$Char &= Chr(Random (Asc($strMin), Asc($strMax), 1))
Else
$Char &= StringUpper(Chr(Random (Asc($strMin), Asc($strMax), 1)))
EndIf
Else
$Char &= Chr(Random (Asc($strMin), Asc($strMax), 1))
EndIf
Next
Return $Char
EndFunc
Re: [Func] RandomLettre (Générer une lettre)
Posté : sam. 17 avr. 2010 14:20
par GMib
On peu eviter les erreurs en mettant $strMin = StringLower ( $strMin ) au debut de la fonction
(faire de meme avec $strMax bien sur)
Re: [Func] RandomLettre (Générer une lettre)
Posté : sam. 17 avr. 2010 14:53
par Tlem
Je n'avais pas rajouté la gestion des erreurs de saisie sur les arguments, exprès pour éviter de compliquer le code, mais dans ce cas il vaudrais mieux faire une gestion complète en testant
$strMin et
$strMax, pour qu'ils fasse partie de la chaîne "abcdefghijklmnopqrstuvwxyz" (avec
StringInStr() par exemple), pour que la longueur de
$strMin et
$strMax ne dépasse pas 1 caractère, pour que
$szNb soit bien un nombre entier > 0 et pour que 0<= $szType >= 2.
Évidement, il faudra aussi gérer en cas d'erreur un retour vide et fixer
@error.
Voilà. Je pense que si tout ca est mis en place, ce sera une fonction complète à part entière.
