Hallo Leute,
ich sitze derzeit an einem Log-Viewer welcher deine .txt-Datei ausliest & den Zeilen entsprechend ausgibt.
Hier erstmal mein aktuelles Script:
Spoiler anzeigen
#RequireAdmin
[/autoit] [autoit][/autoit] [autoit]#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ListViewConstants.au3>
#include <GuiListView.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <MsgBoxConstants.au3>
#include <ComboConstants.au3>
#include <EditConstants.au3>
#include <Array.au3>
#include <GuiComboBox.au3>
Opt("GUIResizeMode",$GUI_DOCKALL)
[/autoit] [autoit][/autoit] [autoit]#Region ### START Koda GUI section ### Form=
$Window_Title = GUICreate("D2BS Tornister", 1027, 451, 254, 124)
$iListview = GUICtrlCreateListView("", 10, 10, 1000, 390)
$button_reload = GUICtrlCreateButton("Reload", 826, 416, 65, 25)
$button_autoReload = GUICtrlCreateButton("Start Auto-Reload", 896, 416, 105, 25)
$button_open = GUICtrlCreateButton("Open", 756, 416, 65, 25)
$comboAction = GUICtrlCreateCombo("All", 16, 416, 121, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$comboType = GUICtrlCreateCombo("All", 160, 416, 121, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$comboEntrys = GUICtrlCreateCombo("10", 304, 416, 129, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
$inputSearch = GUICtrlCreateInput("Input1", 448, 416, 129, 21)
$buttonSearch = GUICtrlCreateButton("Search", 592, 415, 69, 25)
GUISetState(@SW_SHOW)
GUICtrlSetState($button_reload, $GUI_DISABLE)
GUICtrlSetState($button_autoReload, $GUI_DISABLE)
GUICtrlSetData($inputSearch, '')
#EndRegion ### END Koda GUI section ###
_GUICtrlListView_AddColumn($iListview, "Zeit", 100)
_GUICtrlListView_AddColumn($iListview, "Aktion", 100)
_GUICtrlListView_AddColumn($iListview, "Typ", 100)
_GUICtrlListView_AddColumn($iListview, "Name", 100)
_GUICtrlListView_AddColumn($iListview, "Area", 100)
_GUICtrlListView_AddColumn($iListview, "Beschreibung", 278)
Global $sFilePath = RegRead("HKEY_CURRENT_USER\Software\Loginator", "Path")
Global $tStart
Global $tStatus = '0'
Global $vActionArray
Global $vTypeArray
Global $vCountEntry[1]
Global $vFirstTime = 1
Global $counter = 0
if($sFilePath <> '') Then
_readFile()
GUICtrlSetState($button_reload, $GUI_ENABLE)
GUICtrlSetState($button_autoReload, $GUI_ENABLE)
EndIf
_ArrayAdd($vCountEntry, '10')
_ArrayAdd($vCountEntry, '20')
_ArrayAdd($vCountEntry, '30')
_ArrayAdd($vCountEntry, '40')
_ArrayAdd($vCountEntry, '50')
_ArrayAdd($vCountEntry, '100')
_ArrayAdd($vCountEntry, 'All')
GUICtrlSetData($comboEntrys, _ArrayToString($vCountEntry))
_GUICtrlComboBox_SelectString($comboEntrys, '10')
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
[/autoit] [autoit][/autoit] [autoit]Case $comboAction
_readFile()
Case $comboType
_readFile()
Case $comboEntrys
_readFile()
Case $buttonSearch
$vFilter3 = StringLower(GuiCtrlRead($inputSearch))
_readFile()
Case $GUI_EVENT_CLOSE
$hFileOpen = ""
if($hFileOpen <> "") Then
FileClose($hFileOpen)
EndIf
Exit
Case $button_reload
_readFile()
Case $button_autoReload
If(GUICtrlRead($button_autoReload) == "Stop Auto-Reload") Then
GUICtrlSetData($button_autoReload, 'Start Auto-Reload')
GUICtrlSetState($button_reload, $GUI_ENABLE)
$tStatus = '0'
Else
GUICtrlSetData($button_autoReload, 'Stop Auto-Reload')
GUICtrlSetState($button_reload, $GUI_DISABLE)
$tStatus = '1'
$tDiff = TimerInit()
EndIf
Case $button_open
$sFilePath = FileOpenDialog("Open Log", @WorkingDir, "Textdateien (*.txt)")
if($sFilePath <> '') Then
RegWrite("HKEY_CURRENT_USER\Software\Loginator", "Path", "REG_SZ", $sFilePath)
EndIf
GUICtrlSetState($button_reload, $GUI_ENABLE)
GUICtrlSetState($button_autoReload, $GUI_ENABLE)
_readFile()
EndSwitch
[/autoit] [autoit][/autoit] [autoit]if($tStatus = 1) Then
if TimerDiff($tStart) > 300000 Then
_GUICtrlListView_DeleteAllItems($iListview)
_readFile()
$tStart = TimerInit()
EndIf
EndIf
WEnd
[/autoit] [autoit][/autoit] [autoit]Func _readFile()
_GUICtrlListView_DeleteAllItems($iListview)
$vActionArray = 0
$vTypeArray = 0
Global $vActionArray[1]
Global $vTypeArray[1]
_ArrayAdd($vTypeArray, 'All')
_ArrayAdd($vActionArray, 'All')
Global $hFileOpen = FileOpen($sFilePath)
If $hFileOpen = -1 Then
Return False
Else
Global $vFileSize = _FileCountLines ( $sFilePath )
_GUICtrlListView_SetItemCount($iListview, $vFileSize)
Global $aItems[$vFileSize+1][6]
For $iI = 1 To UBound($aItems) - 1
Global $sFileRead = FileReadLine($hFileOpen, $iI)
Global $lineItem = StringSplit($sFileRead, "_")
[/autoit] [autoit][/autoit] [autoit]if($lineItem[3] == GuiCtrlRead($comboAction) or GuiCtrlRead($comboAction) == 'All') Then
if($lineItem[4] == GuiCtrlRead($comboType) or GuiCtrlRead($comboType) == 'All') Then
if(_elementExists($lineItem, 7)) Then
if(StringInStr($lineItem[7], StringLower(GuiCtrlRead($inputSearch))) > 0 or GuiCtrlRead($inputSearch) == '') Then
_buildOutput($iI)
EndIf
Else
if(GuiCtrlRead($inputSearch) == '') Then
_buildOutput($iI)
EndIf
EndIf
EndIf
EndIf
Next
_buildLayout()
FileClose($hFileOpen)
EndIf
EndFunc
Func _buildOutput($i)
$aItems[$i][0] = $lineItem[1]
$aItems[$i][1] = $lineItem[3]
If(_ArraySearch($vActionArray, $lineItem[3]) < 0) Then
_ArrayAdd($vActionArray, $lineItem[3])
EndIf
$aItems[$i][2] = $lineItem[4]
If(_ArraySearch($vTypeArray, $lineItem[4]) < 0) Then
_ArrayAdd($vTypeArray, $lineItem[4])
EndIf
$aItems[$i][4] = $lineItem[5]
If _elementExists($lineItem, 7) Then
$aItems[$i][5] = $lineItem[7]
Else
$aItems[$i][5] = ''
EndIf
EndFunc
Func _buildLayout()
[/autoit] [autoit][/autoit] [autoit]_clearEmpty('0')
[/autoit] [autoit][/autoit] [autoit]If($vFileSize > GuiCtrlRead($comboEntrys) and GuiCtrlRead($comboEntrys) <> 'All') then
For $i = UBound($aItems) - 1 to 0 Step -1
If ($i < $vFileSize- GuiCtrlRead($comboEntrys)) Then
_ArrayDelete($aItems, $i)
EndIf
Next
EndIf
_ArrayDisplay($aItems)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_GUICtrlListView_AddArray($iListview, $aItems)
[/autoit] [autoit][/autoit] [autoit]If($vFirstTime == 1) Then
GUICtrlSetData($comboType, _ArrayToString($vTypeArray))
GUICtrlSetData($comboAction, _ArrayToString($vActionArray))
$vFirstTime = 0
Endif
If(GuiCtrlRead($comboAction) == '') then
GuiCtrlSetData($comboAction, 'All')
EndIf
If(GuiCtrlRead($comboType) == '') then
GuiCtrlSetData($comboType, 'All')
EndIf
_GUICtrlListView_SetColumnWidth($iListview, 0, $LVSCW_AUTOSIZE)
_GUICtrlListView_SetColumnWidth($iListview, 1, $LVSCW_AUTOSIZE)
_GUICtrlListView_SetColumnWidth($iListview, 2, $LVSCW_AUTOSIZE)
_GUICtrlListView_SetColumnWidth($iListview, 3, $LVSCW_AUTOSIZE)
_GUICtrlListView_SetColumnWidth($iListview, 4, $LVSCW_AUTOSIZE)
_GUICtrlListView_SetColumnWidth($iListview, 5, $LVSCW_AUTOSIZE)
;_GUICtrlListView_Scroll($iListview, 0, $vFileSize*20)
EndFunc
Func _elementExists($array, $element)
If $element > UBound($array)-1 Then Return False ; element is out of the array bounds
Return True ; element is in array bounds
EndFunc
Func _clearEmpty($row)
For $i = UBound($aItems) - 1 To 0 Step -1
If ($aItems[$i][$row] == '') Then
_ArrayDelete($aItems, $i)
EndIf
Next
EndFunc
Test-Daten:
Spoiler anzeigen
ZitatAlles anzeigen[04:34:19]_Schrubbiii_Dropped_magic_Duriels Lair_Small Charm of Fortune (88)_Keep in Inventory to Gain Bonus | Required Level: 18 | 5% Better Chance of Getting Magic Items
[04:34:19]_Schrubbiii_Stashed_magic_Duriels Lair_Small Charm of Fortune (88)_Keep in Inventory to Gain Bonus | Required Level: 18 | 5% Better Chance of Getting Magic Items
[04:34:19]_Schrubbiii_Kept_magic_Duriels Lair_Small Charm of Fortune (88)_Keep in Inventory to Gain Bonus | Required Level: 18 | 5% Better Chance of Getting Magic Items
[04:54:32]_Schrubbii_Kept_unique_Catacombs Level 4_Chance Guards (75)_Chain Gloves | Defense: 27 | Durability: 13 of 16 | Required Strength: 25 | Required Level: 15 | +25 to Attack Rating | +24% Enhanced Defense | +15 Defense | 200% Extra Gold from Monsters | 26% Better Chance of Getting Magic Items | +2 to Light Radius
[04:54:33]_Schrubbii_Stashed_unique_Catacombs Level 4_Chance Guards Chain Gloves
[05:00:20]_Schrubbiii_Sold_unique_Crypt_Cost: 36306 (86)_Skin of the Vipermagi | Serpentskin Armor | Defense: 279 | Durability: 19 of 24 | Required Strength: 43 | Required Level: 29 | +1 to All Skills | +30% Faster Cast Rate | +120% Enhanced Defense | All Resistances +33 | Magic Damage Reduced by 9
[05:34:19]_Schrubbiii_Dropped_magic_Duriels Lair_Small Charm of Fortune (88)_Keep in Inventory to Gain Bonus | Required Level: 18 | 5% Better Chance of Getting Magic Items
[05:34:19]_Schrubbiii_Stashed_magic_Duriels Lair_Small Charm of Fortune (88)_Keep in Inventory to Gain Bonus | Required Level: 18 | 5% Better Chance of Getting Magic Items
[05:34:19]_Schrubbiii_Kept_magic_Duriels Lair_Small Charm of Fortune (88)_Keep in Inventory to Gain Bonus | Required Level: 18 | 5% Better Chance of Getting Magic Items
[05:54:32]_Schrubbii_Kept_unique_Catacombs Level 4_Chance Guards (75)_Chain Gloves | Defense: 27 | Durability: 13 of 16 | Required Strength: 25 | Required Level: 15 | +25 to Attack Rating | +24% Enhanced Defense | +15 Defense | 200% Extra Gold from Monsters | 26% Better Chance of Getting Magic Items | +2 to Light Radius
[05:54:33]_Schrubbii_Stashed_unique_Catacombs Level 4_Chance Guards Chain Gloves
[06:00:20]_Schrubbiii_Sold_unique_Crypt_Cost: 36306 (86)_Skin of the Vipermagi | Serpentskin Armor | Defense: 279 | Durability: 19 of 24 | Required Strength: 43 | Required Level: 29 | +1 to All Skills | +30% Faster Cast Rate | +120% Enhanced Defense | All Resistances +33 | Magic Damage Reduced by 9
Jede dieser Zeilen in der .txt (Testdaten) entspricht 1nem Datensatz. Die Ausgabe in der GUI mit mehr Daten schaut so aus:
http://prntscr.com/484pp7
Nun habe ich bereits folgendes gemacht: Mit der linken Combobox lassen sich die verschiedenen Arten unter "Aktion" filtern, mit der 2ten Combobox die verschiedenen Arten der Items Mit dem Input wird der Inhalt der Beschreibung nach dem eingegebenen Begriff durchsucht & ebenfalls ausgefiltert. Also NUR die Daten werden angezeigt, welche den 3 Filtern entsprechen. Die 3te Combobox soll die Einträge limitieren, welche angezeigt werden. Denn die Datei kann innerhalb von 10 Minuten um hunderte Einträge wachsen & dann brauch das einfach zu lang.
Das Problem bei der Funktion liegt warscheinlich in Zeile 193-199. Dort überprüfe ich ob die Anzahl der Einträge in der Datei größer ist als die Anzahl der Dateien welche angezeigt werden sollen (Wert der 3. Combobox [10,20,30,40,50,100,Alle] Problem ist nur: Wenn ich nun 16 Einträge habe, und die folgenden auf meine FIlter zutreffen: [1,2,3,6,11,12,13] werden diese richtig angezeigt bei allen FilterWerten über 10. Wenn ich jedoch eine 10 dort auswähle, schmeißt er mir [1,2,3] raus da sie in der Datei NICHT unter den letzten 10 sind. Jedoch möchte ich dass der 10 gefilterte Einträge ausgibt, somit erst ab dem 11. Eintrag welcher zum Filter passt den Cut macht & diese nicht ausgibt. BeispielScreen für das Problem:
http://prntscr.com/484rsh -> Unter ALLEN Einträgen sind diese dabei die "Keep" unter Beschreibung enthalten.
http://prntscr.com/484rxj -> Unter den letzten 20 Kompletteinträgen ist das die einzige "Keep" (Falsche Ausgabe), hier möchte ich dass er die letzten 20 Keep-Einträge ausgibt & nicht die letzten 20 filtert.
Ich hoffe Ihr könnt das nun ein wenig eher & besser verstehen.
Wäre echt nett wenn sich jemand die Mühe macht & drüberschaut.
Freundliche & morgendliche Grüße,
Schrubber