Habe gerade gesehen, dass autoBerts Lösung durch den Regex ca. 10x schneller ist als meine Lösung...
Also habe ich mal nachgerüstet (Sollte jetzt ca. 2x schneller sein als autoBerts Lösung)
AutoIt
#include <Array.au3>
Local $sRead = FileRead('log.txt')
Local $aLog = LogToArray($sRead)
_ArrayDisplay($aLog)
Func LogToArray($sLog)
Local $aSplit = StringRegExp(StringReplace(StringReplace($sLog, '[', '', 0, 1), ']', '', 0, 1), 'Ihr erhaltet: (.*)', 3), $iUbound = UBound($aSplit), $aRet[$iUbound][2], $aTmp, $iUboundCnt = $iUbound
For $i = 0 To $iUbound - 1 Step 1 ; Aufräumen und Zahlen finden
$aTmp = StringSplit($aSplit[$i], ' ')
$aRet[$i][1] = StringInStr($aSplit[$i], ' x ', 0, 1) ? $aTmp[$aTmp[0]] : 1
$aRet[$i][0] = StringStripWS($aRet[$i][1] > 1 ? StringLeft($aSplit[$i], StringInStr($aSplit[$i], ' x ', 0, 1)) : $aSplit[$i], 3)
Next
For $i = $iUbound - 1 To 0 Step -1 ; Zusammenfassen
For $ii = $i - 1 To 0 Step -1
If $aRet[$i][0] = $aRet[$ii][0] Then ; Doppelter Eintrag gefunden
$aRet[$ii][1] += $aRet[$i][1] ; Anzahl addieren
For $u = $i To $iUboundCnt - 2 Step 1 ; Quasi wie ArrayDelete für ein 2D Array mit [n][2]
$aRet[$u][0] = $aRet[$u + 1][0] ; Allerdings wird das Array nicht verkleinert, sodass
$aRet[$u][1] = $aRet[$u + 1][1] ; kein ReDim aufgerufen wird -> ReDim ist (relativ) langsam.
Next
$iUboundCnt -= 1 ; Der hier zeigt an wie groß das Array eigentlich sein sollte.
ExitLoop
EndIf
Next
Next
ReDim $aRet[$iUboundCnt][2] ; Nur 1x Redim
Return _ArraySort($aRet, 1, 0, 0, 1) ? $aRet : 0 ;Sortieren
EndFunc
Alles anzeigen
lg
M