Définir un ordre de passage

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
littlechiki
Niveau 3
Niveau 3
Messages : 30
Enregistré le : sam. 13 avr. 2019 12:58
Status : Hors ligne

Définir un ordre de passage  

#1

Message par littlechiki » jeu. 23 mai 2019 11:09

Bonjour j'ai créé une fonction pour pourvoir définir une ordre de passage en fonction d'une valeur préétablie (ici $initiative) mais ça ne marche pas. quelqu'un aurait il l'amabilité de m'expliquer mon erreur parce que là, je vois pas...

Code : Tout sélectionner

Func _Ordre($initiative1,$initiative2,$initiative3,$initiative4,$initiative5,$initiative6,$initiative7,$initiative8,$initiative9,$initiative10,$ordre1,$ordre2,$ordre3,$ordre4,$ordre5,$ordre6,$ordre7,$ordre8,$ordre9,$ordre10)
	Local $init[10] = [$initiative1,$initiative2,$initiative3,$initiative4,$initiative5,$initiative6,$initiative7,$initiative8,$initiative9,$initiative10]
	_ArraySort($init,1)
	If $init[0] = $initiative1 Then
		$ordre1 = 1
	ElseIf $init[1] = $initiative1 Then
		$ordre1 = 2
	ElseIf $init[2] = $initiative1 Then
		$ordre1 = 3
	ElseIf $init[3] = $initiative1 Then
		$ordre1 = 4
	ElseIf $init[4] = $initiative1 Then
		$ordre1 = 5
	ElseIf $init[5] = $initiative1 Then
		$ordre1 = 6
	ElseIf $init[6] = $initiative1 Then
		$ordre1 = 7
	ElseIf $init[7] = $initiative1 Then
		$ordre1 = 8
	ElseIf $init[8] = $initiative1 Then
		$ordre1 = 9
	ElseIf $init[9] = $initiative1 Then
		$ordre1 = 10
	EndIf
	 ; 2
	If $init[0] = $initiative2 Then
		$ordre2 = 1
	ElseIf $init[1] = $initiative2 Then
		$ordre2 = 2
	ElseIf $init[2] = $initiative2 Then
		$ordre2 = 3
	ElseIf $init[3] = $initiative2 Then
		$ordre2 = 4
	ElseIf $init[4] = $initiative2 Then
		$ordre2 = 5
	ElseIf $init[5] = $initiative2 Then
		$ordre2 = 6
	ElseIf $init[6] = $initiative2 Then
		$ordre2 = 7
	ElseIf $init[7] = $initiative2 Then
		$ordre2 = 8
	ElseIf $init[8] = $initiative2 Then
		$ordre2 = 9
	ElseIf $init[9] = $initiative2 Then
		$ordre2 = 10
	EndIf
	; 3
	If $init[0] = $initiative3 Then
		$ordre3 = 1
	ElseIf $init[1] = $initiative3 Then
		$ordre3 = 2
	ElseIf $init[2] = $initiative3 Then
		$ordre3 = 3
	ElseIf $init[3] = $initiative3 Then
		$ordre3 = 4
	ElseIf $init[4] = $initiative3 Then
		$ordre3 = 5
	ElseIf $init[5] = $initiative3 Then
		$ordre3 = 6
	ElseIf $init[6] = $initiative3 Then
		$ordre3 = 7
	ElseIf $init[7] = $initiative3 Then
		$ordre3 = 8
	ElseIf $init[8] = $initiative3 Then
		$ordre3 = 9
	ElseIf $init[9] = $initiative3 Then
		$ordre3 = 10
	EndIf
; 4
	If $init[0] = $initiative4 Then
		$ordre4 = 1
	ElseIf $init[1] = $initiative4 Then
		$ordre4 = 2
	ElseIf $init[2] = $initiative4 Then
		$ordre4 = 3
	ElseIf $init[3] = $initiative4 Then
		$ordre4 = 4
	ElseIf $init[4] = $initiative4 Then
		$ordre4 = 5
	ElseIf $init[5] = $initiative4 Then
		$ordre4 = 6
	ElseIf $init[6] = $initiative4 Then
		$ordre4 = 7
	ElseIf $init[7] = $initiative4 Then
		$ordre4 = 8
	ElseIf $init[8] = $initiative4 Then
		$ordre4 = 9
	ElseIf $init[9] = $initiative4 Then
		$ordre4 = 10
	EndIf
; 5
	If $init[0] = $initiative5 Then
		$ordre5 = 1
	ElseIf $init[1] = $initiative5 Then
		$ordre5 = 2
	ElseIf $init[2] = $initiative5 Then
		$ordre5 = 3
	ElseIf $init[3] = $initiative5 Then
		$ordre5 = 4
	ElseIf $init[4] = $initiative5 Then
		$ordre5 = 5
	ElseIf $init[5] = $initiative5 Then
		$ordre5 = 6
	ElseIf $init[6] = $initiative5 Then
		$ordre5 = 7
	ElseIf $init[7] = $initiative5 Then
		$ordre5 = 8
	ElseIf $init[8] = $initiative5 Then
		$ordre5 = 9
	ElseIf $init[9] = $initiative5 Then
		$ordre5 = 10
	EndIf
; 6
	If $init[0] = $initiative6 Then
		$ordre6 = 1
	ElseIf $init[1] = $initiative6 Then
		$ordre6 = 2
	ElseIf $init[2] = $initiative6 Then
		$ordre6 = 3
	ElseIf $init[3] = $initiative6 Then
		$ordre6 = 4
	ElseIf $init[4] = $initiative6 Then
		$ordre6 = 5
	ElseIf $init[5] = $initiative6 Then
		$ordre6 = 6
	ElseIf $init[6] = $initiative6 Then
		$ordre6 = 7
	ElseIf $init[7] = $initiative6 Then
		$ordre6 = 8
	ElseIf $init[8] = $initiative6 Then
		$ordre6 = 9
	ElseIf $init[9] = $initiative6 Then
		$ordre6 = 10
	EndIf
; 7
	If $init[0] = $initiative7 Then
		$ordre7 = 1
	ElseIf $init[1] = $initiative7 Then
		$ordre7 = 2
	ElseIf $init[2] = $initiative7 Then
		$ordre7 = 3
	ElseIf $init[3] = $initiative7 Then
		$ordre7 = 4
	ElseIf $init[4] = $initiative7 Then
		$ordre7 = 5
	ElseIf $init[5] = $initiative7 Then
		$ordre7 = 6
	ElseIf $init[6] = $initiative7 Then
		$ordre7 = 7
	ElseIf $init[7] = $initiative7 Then
		$ordre7 = 8
	ElseIf $init[8] = $initiative7 Then
		$ordre7 = 9
	ElseIf $init[9] = $initiative7 Then
		$ordre7 = 10
	EndIf
; 8
	If $init[0] = $initiative8 Then
		$ordre8 = 1
	ElseIf $init[1] = $initiative8 Then
		$ordre8 = 2
	ElseIf $init[2] = $initiative8 Then
		$ordre8 = 3
	ElseIf $init[3] = $initiative8 Then
		$ordre8 = 4
	ElseIf $init[4] = $initiative8 Then
		$ordre8 = 5
	ElseIf $init[5] = $initiative8 Then
		$ordre8 = 6
	ElseIf $init[6] = $initiative8 Then
		$ordre8 = 7
	ElseIf $init[7] = $initiative8 Then
		$ordre8 = 8
	ElseIf $init[8] = $initiative8 Then
		$ordre8 = 9
	ElseIf $init[9] = $initiative8 Then
		$ordre8 = 10
	EndIf
; 9
	If $init[0] = $initiative9 Then
		$ordre9 = 1
	ElseIf $init[1] = $initiative9 Then
		$ordre9 = 2
	ElseIf $init[2] = $initiative9 Then
		$ordre9 = 3
	ElseIf $init[3] = $initiative9 Then
		$ordre9 = 4
	ElseIf $init[4] = $initiative9 Then
		$ordre9 = 5
	ElseIf $init[5] = $initiative9 Then
		$ordre9 = 6
	ElseIf $init[6] = $initiative9 Then
		$ordre9 = 7
	ElseIf $init[7] = $initiative9 Then
		$ordre9 = 8
	ElseIf $init[8] = $initiative9 Then
		$ordre9 = 9
	ElseIf $init[9] = $initiative9 Then
		$ordre9 = 10
	EndIf
; 10
	If $init[0] = $initiative10 Then
		$ordre10 = 1
	ElseIf $init[1] = $initiative10 Then
		$ordre10 = 2
	ElseIf $init[2] = $initiative10 Then
		$ordre10 = 3
	ElseIf $init[3] = $initiative10 Then
		$ordre10 = 4
	ElseIf $init[4] = $initiative10 Then
		$ordre10 = 5
	ElseIf $init[5] = $initiative10 Then
		$ordre10 = 6
	ElseIf $init[6] = $initiative10 Then
		$ordre10 = 7
	ElseIf $init[7] = $initiative10 Then
		$ordre10 = 8
	ElseIf $init[8] = $initiative10 Then
		$ordre10 = 9
	ElseIf $init[9] = $initiative10 Then
		$ordre10 = 10
	EndIf
EndFunc
Merci à l'avance pour votre aide !

jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2080
Enregistré le : lun. 30 mars 2009 21:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: Définir un ordre de passage

#2

Message par jchd » jeu. 23 mai 2019 11:51

Il serait bien plus simple de passer un tableau à la fonction plutôt que 10 arguments.
Ensuite il serait encore plus simple de créer ce tableau en 2D avec valeur (initiativeX) et index. Le seul tri sur valeur résoud la question.
On évite ainsi 100 tests et 21 variables inutiles.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

littlechiki
Niveau 3
Niveau 3
Messages : 30
Enregistré le : sam. 13 avr. 2019 12:58
Status : Hors ligne

Re: Définir un ordre de passage

#3

Message par littlechiki » jeu. 23 mai 2019 12:36

Là, je dois admettre que j'ai pas compris grand chose. désolé pour ça mais est-ce que je pourrais avoir un exemple ? Je pense que ça m'aiderait grandement, merci !

jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2080
Enregistré le : lun. 30 mars 2009 21:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: Définir un ordre de passage

#4

Message par jchd » jeu. 23 mai 2019 13:55

Code : Tout sélectionner

Local $aInitiatives = [ _
	7, _		; ($initiative1)
	23, _		; ($initiative2)
	4, _		; ($initiative3)
	-3, _		; ($initiative4)
	11, _		; ($initiative5)
	49, _		; ($initiative6)
	8, _		; ($initiative7)
	-17, _		; ($initiative8)
	6, _		; ($initiative9)
	14 _		; ($initiative10)
]

_ArrayColInsert($aInitiatives, 1)
For $i = 0 To UBound($aInitiatives) - 1
	$aInitiatives[$i][1] = $i + 1
Next
_ArrayDisplay($aInitiatives, "Non trié")
_ArraySort($aInitiatives, 1)
_ArrayDisplay($aInitiatives, "Trié")
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

littlechiki
Niveau 3
Niveau 3
Messages : 30
Enregistré le : sam. 13 avr. 2019 12:58
Status : Hors ligne

Re: Définir un ordre de passage

#5

Message par littlechiki » jeu. 23 mai 2019 15:43

Alors je viens d'adapter la fonction à mon application et ça marche avec une erreur, celle ci étant que les chiffres de unités sont considérés comme plus haut que les dizaines. exemple, 8 sera supérieur à 76 mais inférieur à 9 qui lui même sera supérieur à 83. Je ne sais pas si c'est parce que je rentre moi même dans l'application les valeur de $initiative mais ça pose problème...

littlechiki
Niveau 3
Niveau 3
Messages : 30
Enregistré le : sam. 13 avr. 2019 12:58
Status : Hors ligne

Re: Définir un ordre de passage

#6

Message par littlechiki » jeu. 23 mai 2019 15:45

Cependant si je prend des valeurs de $initiative que j'ai établi avant de lancer l'application, il n'y a aucun problème.

jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2080
Enregistré le : lun. 30 mars 2009 21:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: Définir un ordre de passage

#7

Message par jchd » jeu. 23 mai 2019 17:08

Convertir les chaînes en nombre avec Number() ou Int() résoudra le problème.
35 > 4
mais
'35' < '4'
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

littlechiki
Niveau 3
Niveau 3
Messages : 30
Enregistré le : sam. 13 avr. 2019 12:58
Status : Hors ligne

Re: Définir un ordre de passage

#8

Message par littlechiki » jeu. 23 mai 2019 18:16

Ah d'accord, ça j'ai compris ! J'ai réussi à réglé le problème en utilisant un number pour dire $initiative = Number($initiative). Il y a probablement plus simple mais ça marche ! Merci pour toute cette aide !

amphase
Niveau 3
Niveau 3
Messages : 40
Enregistré le : lun. 29 août 2016 23:28
Status : Hors ligne

Re: Définir un ordre de passage

#9

Message par amphase » jeu. 23 mai 2019 19:40

Bonsoir,
Quand les nombres sont traités comme des chiennes chaînes...
Le pourquoi et le comment :
#include <Array.au3>

; valeurs numériques dans la 1ère colonne
Global $aIniOrd = [[85, "f1"], [7, "f2"], [600, "fn"]]
_DispSortDisp($aIniOrd)

; chaînes de caractères
Global $aIniOrd = [["85", "f1"], ["7", "f2"], ["600", "fn"]]
_DispSortDisp($aIniOrd)

; chaînes de caractères formatées avec des zéros devant pour avoir une longueur constante de 3 caractères
Global $sZeros = "000" ; correspond à 0
For $i = 0 To UBound($aIniOrd) - 1
        $iLen = StringLen($aIniOrd[$i][0]) ; nbre de caractères dans la chaîne
;~      ConsoleWrite(@LF & "L16 --> " & $iLen & @LF)
        $aIniOrd[$i][0] = StringLeft($sZeros, 3 - $iLen) & $aIniOrd[$i][0]
;~      ConsoleWrite(@LF & "L18 --> " & StringLeft($sZeros, 3 - $iLen) & @LF)
Next
_DispSortDisp($aIniOrd)


Func _DispSortDisp($a) ; affiche, trie, affiche
        _ArrayDisplay($a)
        _ArraySort($a)
        _ArrayDisplay($a)
EndFunc

Répondre