Ich werf noch mal eine andere Lösung in den Ring, die auch den Ansatz von AspirinJunkie verfolgt: Sortieren nach der IP als Zahl. Wobei ich den BinaryString nehme, weil die Zahl manchmal negativ wäre.
AutoIt
Local $sLogData = "2024/06/23 18:02:36 - Client connected"&@crlf& _
"2024/06/23 18:02:36 - action=login pcname=N210708_b mac=5C61994A3157 ip=192.168.178.22 time=18:02:36"&@crlf& _
"2024/06/23 18:06:55 - Client connected"&@crlf& _
"2024/06/23 18:06:55 - action=logout pcname=N210708_B mac=5C61994A3157 ip=192.168.178.22 time=18:06:55"&@crlf& _
"2024/06/23 18:10:30 - Client connected"&@crlf& _
"2024/06/23 18:10:30 - action=login pcname=N210708_B mac=5C61994A3157 ip=192.168.178.22 time=18:10:30"&@crlf& _
"2024/06/23 18:13:50 - Client connected"&@crlf& _
"2024/06/23 18:13:50 - action=logout pcname=N210708_B mac=5C61994A3157 ip=192.168.178.22 time=18:13:50"&@crlf& _
"2024/06/23 18:18:20 - Server started and listening on port 8085"
Local $arLogData = _parseLog($sLogData)
; Example for reading the data
For $i = 0 to UBound($arLogData)-1 Step 1
ConsoleWrite(($i+1)&". For sorting: "&$arLogData[$i][0]&@crlf)
ConsoleWrite(($i+1)&". LogDate: "&$arLogData[$i][1].logDate&@crlf)
ConsoleWrite(($i+1)&". LogTime: "&$arLogData[$i][1].logTime&@crlf)
ConsoleWrite(($i+1)&". Action: "&$arLogData[$i][1].action&@crlf)
ConsoleWrite(($i+1)&". PCName: "&$arLogData[$i][1].pcname&@crlf)
ConsoleWrite(($i+1)&". Mac: "&$arLogData[$i][1].mac&@crlf)
ConsoleWrite(($i+1)&". IP: "&$arLogData[$i][1].ip&@crlf)
ConsoleWrite(($i+1)&". Time: "&$arLogData[$i][1].time&@crlf)
Next
Func _parseLog($sLog)
Local $arData = StringRegExp($sLog, "(?<date>\d{4}\/\d{2}\/\d{2})\s(?<time>\d{2}:\d{2}:\d{2}\s)-\saction=(?<action>\S+)\spcname=(?<pcname>\S+)\smac=(?<mac>\S+)\sip=(?<ip>(?<ip1>\d+)\.(?<ip2>\d+)\.(?<ip3>\d+)\.(?<ip4>\d+))\stime=(?<time2>\d{2}:\d{2}:\d{2})", 3)
Local $arResult[UBound($arData)/11][2] ; intIp, dataMap
For $i=0 to UBound($arData)-1 Step 11
Local $mData[]
$mData.logDate = $arData[$i]
$mData.logTime = $arData[$i+1]
$mData.action = $arData[$i+2]
$mData.pcname = $arData[$i+3]
$mData.mac = $arData[$i+4]
$mData.ip = $arData[$i+5]
$mData.time = $arData[$i+10]
Local $iUnsignedIntIp = BitOR(BitShift(Int($arData[$i+6]), -24), BitShift(Int($arData[$i+7]), -16), BitShift(Int($arData[$i+8]), -8), Int($arData[$i+9]))
$arResult[$i/11][0] = _toBinaryString($iUnsignedIntIp)
$arResult[$i/11][1] = $mData
Next
return $arResult
EndFunc
Func _toBinaryString($iNumber)
Local $sBinaryNumber = ""
For $i=31 to 0 Step -1
$sBinaryNumber&=BitAND(BitShift($iNumber, $i), 1)
Next
return $sBinaryNumber
EndFunc
Alles anzeigen
Du bekommst also nach dem parsen ein Array mit 2 Werten, dem BinaryString der IP zum sortieren und eine Map mit allen Werten.