Code : Tout sélectionner
#include <UpDownConstants.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <IE.au3>
#Region ### START Koda GUI section ###
$Form1_1 = GUICreate("CSV Convert", 568, 353, -1, -1)
$Annuler = GUICtrlCreateButton("Annuler", 392, 296, 75, 25)
$OK = GUICtrlCreateButton("OK", 480, 296, 75, 25)
$Group1 = GUICtrlCreateGroup(" Radars ", 8, 15, 297, 305)
$Fic_RF = GUICtrlCreateInput("", 16, 63, 250, 21)
$Choix_RF = GUICtrlCreateButton("...", 270, 63, 20, 20)
$Lb_RF = GUICtrlCreateLabel("Fichier radars fixes :", 16, 39, 194, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Fic_RM = GUICtrlCreateInput("", 16, 119, 250, 21)
$Choix_RM = GUICtrlCreateButton("...", 270, 119, 20, 20)
$Lb_RM = GUICtrlCreateLabel("Fichier radars mobiles :", 16, 95, 194, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Fic_RFR = GUICtrlCreateInput("", 16, 183, 250, 21)
$Choix_RFR = GUICtrlCreateButton("...", 270, 183, 20, 20)
$Lb_RFR = GUICtrlCreateLabel("Fichier radars feu rouge :", 16, 159, 194, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Fic_ZD = GUICtrlCreateInput("", 16, 247, 250, 21)
$Choix_ZD = GUICtrlCreateButton("...", 270, 247, 20, 20)
$Lb_ZD = GUICtrlCreateLabel("Fichier radars zones dangereuse :", 16, 223, 242, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Cb_Fusion = GUICtrlCreateCheckbox("Concaténer les fichiers", 16, 287, 185, 17)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup(" Options ", 312, 15, 241, 169)
$Lb_Minhdg = GUICtrlCreateLabel("MINHDG :", 327, 75, 72, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Lb_Maxhdg = GUICtrlCreateLabel("MAXHDG :", 327, 110, 76, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Lb_Distance = GUICtrlCreateLabel("DISTANCE :", 327, 145, 88, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Inp_Minhdg = GUICtrlCreateInput("0", 442, 70, 97, 21)
GUICtrlCreateUpdown(-1, $UDS_WRAP)
GUICtrlSetLimit(-1, 360, 0)
$Inp_Maxhdg = GUICtrlCreateInput("0", 442, 105, 97, 21)
GUICtrlCreateUpdown(-1, $UDS_WRAP)
GUICtrlSetLimit(-1, 360, 0)
$Inp_Distance = GUICtrlCreateInput("0", 442, 140, 97, 21)
$Lb_Unites = GUICtrlCreateLabel("UNITES :", 327, 40, 68, 20)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$Cb_Unites = GUICtrlCreateCombo("", 442, 35, 97, 25)
GUICtrlSetData(-1, "Miles|Feet|Yards|Kilometers|Meters", "Kilometers")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Menu1 = GUICtrlCreateMenu("?")
$MenuAPropos = GUICtrlCreateMenuItem("A propos", $Menu1)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE, $Annuler
Exit
Case $Choix_RF
$aFic_RF = FileOpenDialog("Fichier Radars Fixes", @ScriptDir, "Fichier asc (*.csv)", 1)
If $aFic_RF <> "" Then GUICtrlSetData($Fic_RF, $aFic_RF)
Case $Choix_RM
$aFic_RM = FileOpenDialog("Fichier Radars Mobiles", @ScriptDir, "Fichier asc (*.csv)", 1)
If $aFic_RM <> "" Then GUICtrlSetData($Fic_RM, $aFic_RM)
Case $Choix_RFR
$aFic_RFR = FileOpenDialog("Fichier Radars Feu Rouge", @ScriptDir, "Fichier asc (*.csv)", 1)
If $aFic_RFR <> "" Then GUICtrlSetData($Fic_RFR, $aFic_RFR)
Case $Choix_ZD
$aFic_ZD = FileOpenDialog("Fichier Radars Zones Dangereuses", @ScriptDir, "Fichier asc (*.csv)", 1)
If $aFic_ZD <> "" Then GUICtrlSetData($Fic_ZD, $aFic_ZD)
Case $MenuAPropos
_Apropos()
Case $OK
$vFic_RF = GUICtrlRead($Fic_RF)
$vFic_RM = GUICtrlRead($Fic_RM)
$vFic_RFR = GUICtrlRead($Fic_RFR)
$vFic_ZD = GUICtrlRead($Fic_ZD)
If $vFic_RF & $vFic_RM & $vFic_RFR & $vFic_ZD <> "" Then
SplashTextOn("", "Conversion en cours ...", 250, 60, -1, -1, 32, "", 12, 800)
$Distance = GUICtrlRead($Inp_Distance)
$Maxhdg = GUICtrlRead($Inp_Maxhdg)
$Minhdg = GUICtrlRead($Inp_Minhdg)
$Unites = GUICtrlRead($Cb_Unites)
Select
Case $Unites = "Miles"
$Unites = "MI"
Case $Unites = "Feet"
$Unites = "FT"
Case $Unites = "Yards"
$Unites = "YD"
Case $Unites = "Kilometers"
$Unites = "KM"
Case $Unites = "Meters"
$Unites = "M"
EndSelect
Dim $aRF, $aRM, $aRFR, $aZD
_FileReadToArray($vFic_RF, $aRF)
_FileReadToArray($vFic_RM, $aRM)
_FileReadToArray($vFic_RFR, $aRFR)
_FileReadToArray($vFic_ZD, $aZD)
Dim $sRF, $sRM, $sRFR, $sZD
If IsArray($aRF) Then
$aRF = _DoIt($aRF, "RADAR_FIXE", $Unites, $Maxhdg, $Minhdg, $Distance)
$sRF = _ArrayToString($aRF, @CRLF)
EndIf
If IsArray($aRM) Then
$aRM = _DoIt($aRM, "RADAR_MOBILE", $Unites, $Maxhdg, $Minhdg, $Distance)
$sRM = _ArrayToString($aRM, @CRLF)
EndIf
If IsArray($aRFR) Then
$aRFR = _DoIt($aRFR, "RADAR_FEU_ROUGE", $Unites, $Maxhdg, $Minhdg, $Distance)
$sRFR = _ArrayToString($aRFR, @CRLF)
EndIf
If IsArray($aZD) Then
$aZD = _DoIt($aZD, "ZONE_DANGEREUSE", $Unites, $Maxhdg, $Minhdg, $Distance)
$sZD = _ArrayToString($aZD, @CRLF)
EndIf
If _IsChecked($Cb_Fusion) Then
FileWrite("Radars_Fusion.csv", $sRF & $sRM & $sRFR & $sZD)
Else
If $sRF <> "" Then _SaveNewFile($vFic_RF, $sRF)
If $sRM <> "" Then _SaveNewFile($vFic_RM, $sRM)
If $sRFR <> "" Then _SaveNewFile($vFic_RFR, $sRFR)
If $sZD <> "" Then _SaveNewFile($vFic_ZD, $sZD)
EndIf
SplashOff()
MsgBox(64, "CSV Convert", "Conversion terminée")
EndIf
EndSwitch
WEnd
Exit
; #######################################################
; #################### Fonctions ####################
; #######################################################
Func _IsChecked($control)
Return BitAND(GUICtrlRead($control), $GUI_CHECKED) = $GUI_CHECKED
EndFunc ;==>_IsChecked
Func _DoIt($aRadars, $TypeRadar, $Unt, $Mxhdg = 0, $Mnhdg = 0, $Dst = 0)
Local $i, $Var, $Var2, $Longitude, $Latitude, $Vitesse
For $i = 1 To $aRadars[0]
$Var = StringSplit($aRadars[$i], ",")
$Longitude = $Var[1]
$Latitude = $Var[2]
$Var2 = StringSplit($Var[3], '@"')
$Vitesse = $Var2[3]
$aRadars[$i] = $Latitude & ',' & $Longitude & ',' & $Mxhdg & ',' & $Mnhdg & ',' & _
$Dst & ',' & $Unt & ',"' & $TypeRadar & "_" & $Vitesse & '"'
Next
_ArrayDelete($aRadars, 0) ; On supprime le nombre d'élément du tableau
Return $aRadars
EndFunc ;==>_DoIt
Func _SaveNewFile($Fichier, $sRadar)
Local $szDrive, $szDir, $szFName, $szExt, $Path
$Path = _PathSplit($Fichier, $szDrive, $szDir, $szFName, $szExt)
$Fichier = $szDrive & $szDir & $szFName & "_New" & $szExt
$hFichier = FileOpen($Fichier, 2)
If $hFichier = -1 Then
MsgBox(0, "Erreur", "Impossible de traiter le fichier :" & @CRLF & $Fichier)
Return
EndIf
FileWrite($hFichier, $sRadar)
FileClose($hFichier)
EndFunc ;==>_SaveNewFile
Func _Apropos()
$sHTML = 'Ce programme est conçu pour modifier<br>' & _
'quatre fichiers ascii issus du site <a href=http://www2.alertegps.com/>alertegps.com</a><br><br>' & _
'Les fichiers au format Garmin sont à télécharger ' & _
'<a href=http://www2.alertegps.com/download_basic.asp?id_matos=8&menu=1&sous_menu=1>ici</a><br><br>' & _
'On obtient quatre fichiers :<br>' & _
'RF.csv , radars fixe<br>' & _
'RFR.csv, radars feu rouge<br>' & _
'RM.csv, radars mobile<br>' & _
'ZD.csv, zones dangereuses<br><br>' & _
'Exemple du format de ces 4 fichiers (ZD.csv n''ayant pas de vitesse définie ex: @110)<br>' & _
'55.50166,-21.30224,"Num 3461@110" (Radar fixe)"<br>' & _
'55.42566,-21.30207,"Num 3457@110" (Radar feu rouge)"<br>' & _
'55.30042,-21.23435,"Num 3455@90" (Radar Mobile)<br>' & _
'55.30413,-20.96288,"Num 3456" (Zone Danger)<br><br>' & _
'Ce format est compatible Garmin, soit :<br>' & _
'Longitude,Latitude,"Numéro_du_POI@vitesse"<br><br>' & _
'Nous obtenons en sortie :<br>' & _
'Latitude,Longitude,MinHdg,MaxHdg,,,Distance,Unités,"RADAR_FIXE vitesse"<br>' & _
'soit au final :<br>' & _
'-21.30224,55.50166,,,500,"RADAR_FIXE_110"<br>' & _
'-21.30207,55.42566,,,500,"RADAR_FEU_ROUGE_110"<br>' & _
'-21.23435,55.30042,,,500,"RADAR_MOBILE_90"<br>' & _
'-20.96288,55.30413,,,500,"ZONE_DANGER"'
_IEErrorHandlerRegister()
$oIE = _IECreateEmbedded()
$GuiApropos = GUICreate("À Propos", 640, 550, -1, -1, $WS_OVERLAPPEDWINDOW + $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_CLIPCHILDREN)
$GUIActiveX = GUICtrlCreateObj($oIE, 5, 5, 630, 500)
$OK2 = GUICtrlCreateButton("OK", 300, 515, 75, 25)
_IENavigate($oIE, "")
_IEBodyWriteHTML($oIE, $sHTML)
GUISetState()
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE Or $msg = $OK2
ExitLoop
EndSelect
WEnd
GUIDelete($GuiApropos)
EndFunc ;==>_Apropos