Code : Tout sélectionner
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=ciseau.ico
#AutoIt3Wrapper_outfile=decoupe.exe
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <Array.au3>
#Include <File.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ProgressConstants.au3>
Global $_File1, $_File2, $_File3, $_tmpVar_StrLen, $_MainDicoPath
Global $dico11 = 2, $dico21 = 6, $dico31 = 9, $dico12 = 5, $dico22 = 8, $dico32 = "*"
$main_window = GUICreate("Dictionary sort for Hung Game", 400, 199, -1, -1)
GUICtrlCreateLabel("Select your dictionary :",5,10,300,20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
Global $File = GUICtrlCreateInput("", 170, 10,190, 20)
;Global $_MainDicoPath = @ScriptDir & "\dico.txt"
GUICtrlCreateLabel("Minimum",75,45,70,30)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlCreateLabel("Maximum",173,45,70,30)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
Global $progress = GUICtrlCreateProgress(10, 140, 380, 17,$PBS_SMOOTH)
$Info = GUICtrlCreateLabel("",255,45,300,30)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlCreateLabel("dico1 :",10,70,50,30)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlCreateLabel("dico2 :",10,90,50,30)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlCreateLabel("dico3 :",10,110,50,30)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
[color=#FF0000]GUICtrlCreateLabel("Number of words :",10,172,150,30)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$NbrsWords = GUICtrlCreateLabel("",145,172,80,30)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")[/color]
$MinDico1_Min = GUICtrlCreateButton("<",70, 68, 20, 20,0)
$MaxDico1_Min = GUICtrlCreateButton(">",120, 68, 20, 20,0)
$ValMinDico1 = GUICtrlCreateInput($dico11, 95, 68,20, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$MinDico2_Min = GUICtrlCreateButton("<",70, 88, 20, 20,0)
$MaxDico2_Min = GUICtrlCreateButton(">",120, 88, 20, 20,0)
$ValMinDico2 = GUICtrlCreateInput($dico21, 95, 88,20, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$MinDico3_Min = GUICtrlCreateButton("<",70, 108, 20, 20,0)
$MaxDico3_Min = GUICtrlCreateButton(">",120, 108, 20, 20,0)
$ValMinDico3 = GUICtrlCreateInput($dico31, 95, 108,20, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$MinDico1_Max = GUICtrlCreateButton("<",170, 68, 20, 20,0)
$MaxDico1_Max = GUICtrlCreateButton(">",220, 68, 20, 20,0)
$ValMaxDico1 = GUICtrlCreateInput($dico12, 195, 68,20, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$MinDico2_Max = GUICtrlCreateButton("<",170, 88, 20, 20,0)
$MaxDico2_Max = GUICtrlCreateButton(">",220, 88, 20, 20,0)
$ValMaxDico2 = GUICtrlCreateInput($dico22, 195, 88,20, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$MinDico3_Max = GUICtrlCreateButton("<",170, 108, 20, 20,0)
$MaxDico3_Max = GUICtrlCreateButton(">",220, 108, 20, 20,0)
$ValMaxDico3 = GUICtrlCreateInput($dico32, 195, 108,20, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Choix = GUICtrlCreateButton("...",370, 10, 20, 20,0)
$Annuler = GUICtrlCreateButton("Cancel", 300, 170, 75, 25, 0)
$OK = GUICtrlCreateButton("OK", 200, 170, 75, 25, 0)
GUISetState(@SW_SHOW)
GUICtrlSetData($progress, 0)
global $progress_pourcent = 0
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Annuler ; Si la fenêtre est fermée ou si le bouton annulé est cliqué.
Exit
Case $Choix ; Si le bouton ... à été cliqué.
$Fichier = FileOpenDialog("Select a files please !", @ScriptDir, "File asc (*.txt)", 1)
If $Fichier <> "" Then GUICtrlSetData($File, $Fichier) ; Si le nom du fichier n'est pas vide, on attribue ca valeur au champ de l'input.
[color=#FF0000]Global $TotalOfWords = _FileCountLines ($Fichier)
GUICtrlSetData($NbrsWords,$TotalOfWords)[/color]
Case $MinDico1_Min
If $dico11 = 2 Then;test empéchant une valeur < 2
$dico11 = 2
Else
$dico11 -= 1
EndIf
GUICtrlSetData($ValMinDico1, $dico11)
Case $MaxDico1_Min
$dico11 += 1
GUICtrlSetData($ValMinDico1, $dico11)
Case $MinDico2_Min
$dico21 -= 1
GUICtrlSetData($ValMinDico2, $dico21)
Case $MaxDico2_Min
$dico21 += 1
GUICtrlSetData($ValMinDico2, $dico21)
Case $MinDico3_Min
$dico31 -= 1
GUICtrlSetData($ValMinDico3, $dico31)
Case $MaxDico3_Min
$dico31 += 1
GUICtrlSetData($ValMinDico3, $dico31)
Case $MinDico1_Max
If $dico12 = 2 Then;test empéchant une valeur < 2
$dico12 = 2
Else
$dico12 -= 1
EndIf
GUICtrlSetData($ValMaxDico1, $dico12)
Case $MaxDico1_Max
$dico12 += 1
GUICtrlSetData($ValMaxDico1, $dico12)
Case $MinDico2_Max
$dico22 -= 1
GUICtrlSetData($ValMaxDico2, $dico22)
Case $MaxDico2_Max
$dico22 += 1
GUICtrlSetData($ValMaxDico2, $dico22)
Case $MinDico3_Max
$dico32 -= 1
GUICtrlSetData($ValMaxDico3, $dico32)
Case $MaxDico3_Max
$dico32 += 1
GUICtrlSetData($ValMaxDico3, $dico32)
Case $OK ; Si le bouton OK à été cliqué.
$_MainDicoPath = GUICtrlRead($File) ; On lit le nom du fichier
If FileExists($Fichier) Then ; On vérifie que le fichier existe bel et bien.
GUICtrlSetData($Info,"Cutting is running !!!")
$_File1 = FileOpen("dico1", 2)
$_File2 = FileOpen("dico2", 2)
$_File3 = FileOpen("dico3", 2)
$contenu=FileRead($_MainDicoPath)
$liste_1=build_regexp($contenu,$dico11,$dico12)
If Not @error Then _FileWriteFromArray($_File1,$liste_1)
$liste_2=build_regexp($contenu,$dico21,$dico22)
If Not @error Then _FileWriteFromArray($_File2,$liste_2)
$liste_3=build_regexp($contenu,$dico31)
If Not @error Then _FileWriteFromArray($_File3,$liste_3)
FileClose($_File1)
FileClose($_File2)
FileClose($_File3)
MsgBox(0,"Info","You have now three dictionaries !"&@CRLF&@CRLF& _
"dico1 --> "&$dico11&" to "&$dico12&" lettres"&@CRLF& _
"dico2 --> "&$dico21&" to "&$dico22&" lettres"&@CRLF& _
"dico3 --> "&$dico31&" and more lettres")
Exit
EndIf
EndSwitch
Wend
Func build_regexp($text,$min,$max="")
Local $pattern_gen="\n\s*([\w]{"&$min&","&$max&"})\s*\n|(\A[\w]{"&$min&","&$max&"})\s*\n"
Local $retours
$retours=StringRegExp($text,$pattern_gen,3)
[color=#FF0000]For $i=0 to UBound($retours) - 1
$progress_pourcent += 10
GUICtrlSetData($progress, $progress_pourcent/$TotalOfWords*100)
Next[/color]
If IsArray($retours) Then
_ArraySort($retours)
If ($retours[0]="") Then _ArrayDelete($retours,0) ; petit soucis de de stringregexp quand on a un match à droite de |, alors on a un retours ""+bonne réponse
SetError(0)
Return $retours
Else
SetError(1)
Return 0
EndIf
EndFunc