Je souhaiterai associer le nombre d'erreurs par adresse MAC dans la colonne "Erreurs" ("Listbox" dans le code) sauf que là je sèche...
Je pensais que ce serait simple mais faut croire que non ou alors l'idée n'est pas là et je pars sur une mauvaise voie.
Pouvez vous m'apporter votre expérience, des jours que je sèche ?
Merci d'avance
Fichier Log à glisser dans GUICtrlCreateInput 2016-10-05 - 16h30.154 => https://mega.nz/#!HJ9Q3K7Z!76vXpbYMk0_7 ... ZDFZUQSlz8
Code : Tout sélectionner
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.8.1
Author:
Script Function:
ZigBee Data Request.
#ce ----------------------------------------------------------------------------
#include <File.au3>
#include <Array.au3>
;~ #include <GuiListBox.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <EditConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#NoTrayIcon
Opt("TrayIconHide", 1)
Local $AddOnsVersion = "0.0.0.1"
Local $ParentTitle = "ZigBee Data Request" &" v"& $AddOnsVersion
Local $ParentHandle = GUICreate($ParentTitle, 840, 285, Default, Default, -1, $WS_EX_ACCEPTFILES)
Local $Drag = GUICtrlCreateInput(" [ Déposez le fichier .154 ici ]", 5, 260, 705, 21)
GUICtrlSetState($Drag, $GUI_DROPACCEPTED)
GUICtrlCreateLabel("Adresse(s) MAC", 10, 8)
GUICtrlCreateLabel("Adresse(s) MAC ZigBee en défaut", 270, 8)
Local $ListBox = GUICtrlCreateListView("MAC |ID |Erreurs", 5, 30, 240, 225, $LVS_SHOWSELALWAYS)
Local $ZigBee = GUICtrlCreateListView("ID |Adresse MAC|Ligne|Ligne complète|nombre d'erreurs", 250, 30, 585, 225, $LVS_SHOWSELALWAYS)
Local $idBtn = GUICtrlCreateButton("Lancer la recherche", 715, 260, 120, 20)
GUISetState(@SW_SHOW)
Func _Start()
GUICtrlSetState($idBtn, $GUI_DISABLE)
Global $Erreur = "", $k = "", $Data_request = ""
Global $String_ListBox_Mem = "", $Lines_Mem = ""
Global $String_ZigBee_Mem = ""
_GUICtrlListView_DeleteAllItems($ListBox)
GUISetState()
_GUICtrlListView_DeleteAllItems($ZigBee)
GUISetState()
$File = GUICtrlRead($Drag)
$Read = FileRead($File)
$Read = StringReplace($Read, @CRLF, "|")
$Lines = StringSplit($Read, "|")
$FileCountLines = $Lines[0]
For $i = 1 To $FileCountLines
;~ If $GUI_EVENT_CLOSE = GUIGetMsg() Then Exit
WinSetTitle($ParentHandle, "", $ParentTitle &" - 1/2 Recherche MAC et ID "& $i & "/" & $FileCountLines)
_Search_MAC_Adress($i, $Lines[$i])
Next
$MACs = StringSplit($String_ListBox_Mem, "~")
$MACsCountLines = $MACs[0]
For $i = 1 To $FileCountLines
;~ If $GUI_EVENT_CLOSE = GUIGetMsg() Then Exit
WinSetTitle($ParentHandle, "", $ParentTitle &" - 2/2 Associe ID et MAC "& $i & "/" & $FileCountLines)
$Lines_Mem = $Lines_Mem & $Lines[$i] & "~"
If $i > 3 Then
$Lines_Mem_Array = StringSplit($Lines_Mem, "~")
$Lines_Mem = StringTrimLeft($Lines_Mem, StringInStr($Lines_Mem , "~"))
$Line = $Lines_Mem_Array[1]
$Line1 = StringMid($Line, 20, 2) ; $Line1 0C
$Line2 = StringMid($Lines_Mem_Array[2], 20, 2) ; $Line2 05
$Line3 = StringMid($Lines_Mem_Array[3], 20, 2) ; $Line3 0C
$Line4 = StringMid($Lines_Mem_Array[4], 20, 2) ; $Line4 05
$ID1 = StringMid($Line, 44, 5) ; ex: 34,14
$ID2 = StringMid($Lines_Mem_Array[2], 44, 5) ; ex: 34,14
$ID3 = StringMid($Lines_Mem_Array[3], 44, 5) ; ex: 34,14
$ID4 = StringMid($Lines_Mem_Array[4], 44, 5) ; ex: 34,14
If $Line1 = "0C" And $Line2 = "05" And $Line3 = "0C" And $Line4 = "05" And $Line1 = $Line3 And $Line2 = $Line4 And $ID1 = $ID3 And $ID2 = $ID4 Then
;~ ConsoleWrite($i-2 &" IDs "&$ID1&"="&$ID3&" Lines "&$Line1&"="&$Line3 &@CRLF)
_Associate_ID_With_MAC_Adress($i-2, $Line, $MACsCountLines, $MACs)
EndIf
EndIf
Next
WinSetTitle($ParentHandle, "", $ParentTitle &" - terminé, "&$FileCountLines&" traitements éffectués")
GUICtrlSetState($idBtn, $GUI_ENABLE)
EndFunc
Func _Search_MAC_Adress($i, $line)
If StringMid($line, 20, 8) = "1B,63,CC" And StringMid($line, 53, 8) = "4F,15,00" Then ; Cherche l'adresse MAC
$MAC = 0
$MAC = StringSplit(StringMid($line, 38, 23), ",")
_ArrayReverse($MAC)
$MAC_Adress = ""
For $j = 0 To 7
$MAC_Adress = $MAC_Adress & $MAC[$j]
Next
$ID = 0
$ID = StringSplit(StringMid($line, 89, 5), ",")
_ArrayReverse($ID)
$ID_Src = ""
For $j = 0 To 1
$ID_Src = $ID_Src & $ID[$j]
Next
$MAC_Adress = StringRegExpReplace($MAC_Adress, "..\K(?!$)", ":")
$ID_Src = StringRegExpReplace($ID_Src, "..\K(?!$)", ":") ; & " ("&StringMid($line, 44, 5)&") "
$String = $MAC_Adress & "|" & $ID_Src
If Not StringInStr($String_ListBox_Mem, $String) Then
$String_ListBox_Mem = $String_ListBox_Mem & $String & "|~"
GUICtrlCreateListViewItem($String, $ListBox)
$k = $k+1
;~ ConsoleWrite("$k "& $k & @CRLF)
EndIf
EndIf ; Cherche l'adresse MAC
EndFunc
Func _Associate_ID_With_MAC_Adress($i, $Line, $MACsCountLines, $MACs)
;~ 0x01 Association request(Tx)
;~ 0x02 Association response(Rx)
;~ 0x03 Disassociation notification(Tx,Rx)
;~ 0x04 Data request(Tx)
;~ 0x05 PAN ID conflict notification(Tx)
;~ 0x06 Orphan notification(Tx)
;~ 0x07 Beacon request(Tx)
;~ 0x08 coordinator realignment(Rx)
;~ 0x09 GTS Request
;~ 0x0a-0xFF Reserved
;~ If StringMid($line, 50, 2) = "04" And StringLen($line) = "57" Then ; Cherche l'ID : 0x04 Data request(Tx)
;~ ConsoleWrite(StringLen($line) &" "& $Erreur &" Data request" & $Line & @CRLF) ; StringLen = 36
$ID = 0
$ID = StringSplit(StringMid($line, 44, 5), ",") ; 31/14
_ArrayReverse($ID) ; 14/31
$ID_Src = ""
For $j = 0 To 1
$ID_Src = $ID_Src & $ID[$j] ; 1431
Next
$ID_Src = StringRegExpReplace($ID_Src, "..\K(?!$)", ":") ; 14:31
For $j = 1 To $MACsCountLines-1
$Split = StringSplit($MACs[$j], "|")
;~ ConsoleWrite($Split[2] & @CRLF)
If $Split[2] = $ID_Src Then
$Erreur = $Erreur +1
$MAC_Adress = $Split[1]
$ID = $Split[2]
$String = $ID & "|" & $MAC_Adress & "|" & $i & "|" & $Line & "|" & $Erreur
;~ ConsoleWrite($String & @CRLF)
GUICtrlCreateListViewItem($String, $ZigBee)
EndIf
Next
EndFunc
;~ ConsoleWrite($file)
While 1
$msg = GUIGetMsg()
;~ ConsoleWrite($msg)
Select
Case $msg = $GUI_EVENT_CLOSE
GUIDelete()
Exit
Case $msg = $idBtn or $msg = -13 ; _Start
_Start()
EndSelect
Sleep(25)
WEnd