ça fait quelques temps que j'ai commencé à utiliser autoit et récemment j'ai créé deux programmes :
l'un permet d'extraire le code html d'un site et de le copier dans un fichier html local pour pouvoir le lire sans internet,
le second permet de calculer le PGCD via l'algorithme d'Euclide pour autant de nombres que l'on veut.
Je vais vous expliquer d'abord le premier bug sur l'extracteur html.
Je récupère le code dans l'Edit, puis que je l'envoie dans le fichier html, ensuite je vais voir si ça a marché et lorsque
je reviens sur ma fenêtre le titre a disparu !
Je vous laisse regarder par vous-même :
► Afficher le texte
Code : Tout sélectionner
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <IE.au3> ;on inclue les fonctions IE pour récupérer le code html
#Region ### START Koda GUI section ### Form=c:\users\philippe\desktop\form1.kxf
Global $Form = GUICreate("Auto xHTML Copy 2010", 651/1680*@DesktopWidth, 551/1050*@DesktopHeight, 192/1680*@DesktopWidth, 124/1050*@DesktopHeight)
Global $Title = GUICtrlCreateLabel("Auto xHTML Copy 2010",146/1680*@DesktopWidth, 24/1050*@DesktopHeight, 50416/1680*@DesktopWidth, 36/1050*@DesktopHeight)
GUICtrlSetFont(-1, 23, 800, 4, "Rockwell")
Global $Chargeur = GUICtrlCreateInput("http://batch.xoo.it/index.php", 16/1680*@DesktopWidth, 152/1050*@DesktopHeight, 409/1680*@DesktopWidth, 28/1050*@DesktopHeight)
Global $B_Chargeur = GUICtrlCreateButton("Charger la page internet ....", 440/1680*@DesktopWidth, 152/1050*@DesktopHeight, 201/1680*@DesktopWidth, 28/1050*@DesktopHeight, $WS_GROUP)
Global $E_Code = GUICtrlCreateEdit("", 16/1680*@DesktopWidth, 200/1050*@DesktopHeight, 617/1680*@DesktopWidth, 281/1050*@DesktopHeight)
Global $I_Page = GUICtrlCreateInput(@DesktopDir & "\untilted", 14/1680*@DesktopWidth, 108/1050*@DesktopHeight, 409/1680*@DesktopWidth, 28/1050*@DesktopHeight)
Global $all = GUICtrlCreateButton("Insérer dans le fichier", 30/1680*@DesktopWidth, 496/1050*@DesktopHeight, 265/1680*@DesktopWidth, 42/1050*@DesktopHeight, $WS_GROUP)
Global $ini = GUICtrlCreateButton("Insérer dans un .ini", 356/1680*@DesktopWidth, 496/1050*@DesktopHeight, 265/1680*@DesktopWidth, 42/1050*@DesktopHeight, $WS_GROUP)
Global $L1 = GUICtrlCreateLabel("Nom complet du fichier avec extension (rajouter .ini si fichier ini) : ", 16/1680*@DesktopWidth, 78/1050*@DesktopHeight, 624/1680*@DesktopWidth, 22/1050*@DesktopHeight)
GUICtrlSetFont(-1, 14, 400, 0, "Rockwell")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ### ; on créé l'interface Gui
Local $B_Chargeur,$charg,$Chargeur,$code,$Cold,$E_Code,$Form,$Hot,$ini,$I_Page,$L1,$L2,$Page,$Title,$all
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $B_Chargeur
$Page=GUICtrlRead($Chargeur) ; on lit ce qu'il y a dans l"input (une adresse web normalement)
$code=_IECreate($Page,"",0) ; on ouvre IE à cette adresse en mode caché (0)
$charg=_IEDocReadHTML($code) ; on récupère le code hmtl dans cette fenêtre
If @error=1 Then ; si le message d'erreur ets 1 alors il y a une erreur indéfinie
MsgBox(1,"Undefined error","Une erreur non-identifiée est survenue lors du chargement de la page")
ElseIf @error=3 Then ; si le message est 3 alors on a une erreur de syntaxe
Msgbox(1,"Data error","Le nom de la page web est invalide, chargement annulé")
ElseIf @error=4 Then ; si le message est 4 alors on l'adresse n'existe pas
MsgBox(1,"Object error","La page web n'existe pas, chargement impossible")
ElseIf @error=6 Then ; si le message est 6 alors le temps de chargement a expiré
Msgbox(1,"Loading timeout expired","Le temps de chargement a expiré, vérifiez votre connection internet")
ElseIf @error=8 Then ; si le message est 8 alors vous voulez accéder à des endroits qui vous sont interdits
Msgbox(1,"Acces denied","Accés refusé")
ElseIf @error=9 Then ; si c'est 9 alors on a été déconnecté d'internet
Msgbox(1,"You've been disconected","Vous avez été déconnecté")
EndIf
GUICtrlSetData($E_Code,$charg) ; on entre le code dans l'editbox
Case $ini ; si on clique sur le bouton ini alors
$Hot=GUICtrlRead($I_Page) ; on récupère le chemin complet dans l'input
$Cold=GUICtrlRead($E_Code) ; on lit l'editbox
$Num=StringSplit($Hot,".")
If $Num[$Num[0]] <> "ini" Then ;Si l'extension n'est pas bonne alors on le dit et on stoppe l'écriture
MsgBox(1,"Extented error","L'extension : ." & $Num[$Num[0]] & " n'est pas valide, vous devez entrez l'extension .ini")
Else
IniWrite($Hot,$Page & " section",1,$Cold) ; on écrit le code dans l'ini
If FileExists($Hot) Then
MsgBox(1,"Writing succed","Ecriture du code (x)HTML dans le fichier .ini : réussi") ; si ça existe alors on le dit et on a réussi sinon ça a raté
Else
MsgBox(1,"Failure","Le code xHTML n'a pas pu être écrit dans le fichier .ini")
EndIf
EndIf
Case $all
$Hot=GUICtrlRead($I_Page)
$Cold=GUICtrlRead($E_Code)
$Numb=StringSplit($Hot,".")
If FileExists($Hot) Then ;si il existe alors on le supprime
FileDelete($Hot)
EndIf
FileOpen($Hot,1) ; on l'ouvre en mode caché
$test=FileWrite($Hot,$Cold) ; on écrit le code dedans
FileClose($Hot) ;on le ferme
If $test=1 Then
MsgBox(1,"Writing succed","Ecriture du code (x)HTML dans le fichier ." & $Numb[$Numb[0]] & ": réussi")
ElseIf $test=0 Then
MsgBox(1,"Txt file has not been created","Le fichier n'a pas été créé")
EndIf
EndSwitch
$Page=""
$code=""
$char=""
$Hot=""
$Cold=""
$test=""
$Num=""
WEnd
Il me trouve 10 ce qui est juste.
Puis si je rajoute un autre nombre alors ça devient n'importe quoi (Ex: 10;20;30;40;50).
il devrait me trouver toujours 10 mais il me lance le message d'erreur que j'ai moi-même écris quand il n'y a moins de deux éléments d'écris
ou quand il n'y a pas que des nombres.
J'en ai déduis que l'erreur pouvait venir soit du StringSplit(), soit du GuiCtrlRead().
Malgré la mise à jour des variables à la fin du code ça n'a rien changé.
Voilà le code :
► Afficher le texte
Code : Tout sélectionner
Local $y=1, $count=1, $error, $first, $array, $s, $i, $count, $up, $down, $x, $y, $end,;déclaration des variables utilisées en Local
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
Global $Form1 = GUICreate("AutoPGCD Calc",351/1680*@DesktopWidth, 281/1050*@DesktopHeight, 192/1680*@DesktopWidth, 124/1050*@DesktopHeight)
Global $Title = GUICtrlCreateLabel("AutoPGCD Calc", 63/1680*@DesktopWidth, 8/1050*@DesktopHeight, 224/1680*@DesktopWidth, 39/1050*@DesktopHeight)
GUICtrlSetFont(-1, 22, 800, 4, "Maiandra GD")
Global $LTitle = GUICtrlCreateLabel("Calcul du PGCD via l'algorithme d'Euclide", 30/1680*@DesktopWidth, 56/1050*@DesktopHeight, 291/1680*@DesktopWidth, 24/1050*@DesktopHeight)
GUICtrlSetFont(-1, 12, 400, 2, "Maiandra GD")
Global $L1 = GUICtrlCreateLabel('Séparez chaque nombre par un ";"', 8/1680*@DesktopWidth, 104/1050*@DesktopHeight, 210/1680*@DesktopWidth, 22/1050*@DesktopHeight)
GUICtrlSetFont(-1, 11, 400, 0, "Maiandra GD")
Global $I = GUICtrlCreateInput("0;0", 9/1680*@DesktopWidth, 128/1050*@DesktopHeight, 337/1680*@DesktopWidth, 25/1050*@DesktopHeight, BitOR($ES_UPPERCASE,$ES_AUTOHSCROLL))
GUICtrlSetFont(-1, 11, 400, 0, "Maiandra GD")
Global $BOne = GUICtrlCreateButton("Calcul du PGCD", 75/1680*@DesktopWidth, 170/1050*@DesktopHeight, 201/1680*@DesktopWidth, 41/1050*@DesktopHeight, $WS_GROUP)
Global $Answer = GUICtrlCreateLabel("PGCD()=", 6/1680*@DesktopWidth, 235/1050*@DesktopHeight, 334/1680*@DesktopWidth, 38/1050*@DesktopHeight, $SS_CENTER)
GUICtrlSetFont(-1, 11, 800, 0, "Maiandra GD")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;on fait la GUI (elle prend moins de place que la première)
While 1
$nMsg = GUIGetMsg(1)
Switch $nMsg
Case $GUI_EVENT_CLOSE ;si on appuie sur la crois on ferme la fenêtre
Exit
Case $BOne ;si on presse le bouton
$first=GUICtrlRead($I) ; on récupère la valeur le l'input I
$array=StringSplit($first,";",1) ; on récupère tous les élements séparés par des ";"
If $array[0] > 2 or $array[0]=2 Then ;si il y a au moins deux éléments d'écrits alors
For $s=1 To $array[0] Step 1 ; Pour $s=1 jusqu'à le nombre d'élements total
$test=StringIsDigit($array[$s]) ;on vérifie si se sont des nombres
If $test=@error Then ;si erreur alors on le dit
MsgBox(1,"ERROR","La donnée " & $array[$s] & " n'est pas un nombre. Merci de ne noter que des nombres") ;on le dit
$error=1 ;on déclare la variable $erreur
ExitLoop ;on sort dela boucle puisqu'erreur
EndIf
Next
Else ;sinon
MsgBox(1,"Error","Il faut entrer au moins deux éléments pour calculer un PGCD") ;on annonce que les paramètres sont incorrects
$error=1 ;$erreur à 1
EndIf
If $error <> 1 Then ;si $erreur différent de 1
For $i=1 To $array[0]-1 Step 1 ;Pour $i=1 jusqu'au nombre total d'élément -1 (j'ai enlevé un nombre à $array[0] car sinon la boucle faisait toujours un tour de plus, Ex: 1;5, la boucle faisait tour 1 et 2 alors qu'on a besoin que d'un tour) alors
If $count=1 Then ; si c'est al première fois
If $array[$i] > $array[$i+1] Then ; on regarde qui est supérieur à l'autre
$up=$array[$i]
$down=$array[$i+1]
Else
$up=$array[$i+1]
$down=$array[$i] ;on défini les ordres de grandeur
EndIf
While $y<>0 ;Tant que y est différent de 0 ($y=1 au départ)
$x=Round($up/$down) ;on cherche l'arrondi du plus grand par le plus petit
$y=$up-($x*$down) ; on défini le nombre nécessaire à additionner au plus petit multiplié par l'arrondi (divison Euclidienne, le reste)
$up=$down ;on change les positions pour recommencer un tour
$down=$y ;idem
WEnd
$end=$up-$down ;ici c'est si le reste égal 0 dès le début
$test=StringIsDigit($end) ;on vérifie si c'est un nombre
If $test=@error Then ;si non
$end=StringMid($end,2) ; on supprime le - devant en récupérant à partir du deuxième caractère
EndIf
$y=1
$count=0 ;on met count à 0 pour passer à la méthode n°2
Else ;début de la seconde méthode
If $end > $array[$i+1] Then
$up=$end
$down=$array[$i+1]
Else
$up=$array[$i+1]
$down=$end ;idem qu'au premier sauf qu'on ne récupère plus le nomber qui correspond à la boucle For mais le précédent et le suivant
EndIf
While $y<>0
$x=Round($up/$down)
$y=$up-($x*$down)
$up=$down
$down=$y
WEnd ;idem
$end=$up-$down
$test=StringIsDigit($end)
If $test=@error Then
$end=StringMid($end,2)
EndIf
$y=1 ;idem sauf qu'on ne redéfinie par $count au cas ou il y aurait un autre tour
EndIf
Next
GUICtrlSetData($Answer, "PGCD(" & $first & ")= " & $end) ;on met à jour le label correspondant
$count=1
$y=1 ;mise à jour des variables
Else
$error=0 ;sinon (si il y avait une erreur) alors on remet $error à 0
EndIf
$array=""
$first=""
EndSwitch
WEnd



