CartoonDragon Posted March 16, 2011 Posted March 16, 2011 (edited) Hello everyone, Earlier i was having trouble with a script and Smashly made me a lovely script which did what i wanted to, now comes the fact that i want to combine it in to the script that i'm using, tho it would be nearly impossible to have anyone else run the script like i do, i try to cut out the 2 pieces that i need to make work together. Smashly's script expandcollapse popup#include <GuiConstantsEx.au3> #include <GuiListView.au3> #Include <File.au3> Opt('MustDeclareVars', 1) _Main() If @error Then MsgBox(64, "Error", "No txt file found") Func _Main() ;Set this to the path of yoor large text file Local $sTextFile = @ScriptDir & "\LargeTextfile.txt" Local $aText, $hListView ;Read the txt file to an array If Not _FileReadToArray($sTextFile, $aText) Then Return SetError(1, 0, 0) ; Dim a 2D $aLV_Text array based on how many items are in the $aText array ; We use this array later to add it to the listview. Dim $aLV_Text[$aText[0]][1] ; Loop through the $aText array For $i = 1 To $aText[0] ; String Split each line at the comma Local $aSSL = StringSplit($aText[$i], ",") ; See if we need more collomns in out listview If $aSSL[0] > Ubound($aLV_Text, 2) Then ReDim $aLV_Text[$aText[0]][$aSSL[0]] ;Loop through the Split line and add the new broken up line to $aLV_Text array. For $j = 0 To Ubound($aLV_Text, 2) - 1 $aLV_Text[$i - 1][$j] = $aSSL[$j + 1] Next Next ; Create GUI GUICreate("ListView Add Array", 400, 300) $hListView = GUICtrlCreateListView("", 2, 2, 394, 268) _GUICtrlListView_SetUnicodeFormat($hListView, False) GUISetState() ; Add columns based on how many subitems are in a line For $i = 0 To Ubound($aLV_Text, 2) - 1 If Not $i Then _GUICtrlListView_AddColumn($hListView, "Items ", 100) If $i Then _GUICtrlListView_AddColumn($hListView, "SubItems " & $i, 100) Next ;Set the listview item count based on how many items in the $aLV_Text array, saves the listview calculating structures with every item added _GUICtrlListView_SetItemCount($hListView, Ubound($aLV_Text, 1)) ; Load $aLV_Text array to the listview _GUICtrlListView_AddArray($hListView, $aLV_Text) ; Loop until user exits Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() EndFunc ;==>_Main here is the file called "LargeTextfile.txt" 2011-03-16 11:04:14, Bo Munch Jensen (bmj), \\fs6\privat$\Ansatte\bmj (\\fs6\privat$\Ansatte\bmj), M11550, 10.253.3.12 - fe80::fdb3:c259:4bdb:ab25 & 10.232.28.50 - fe80::a812:82fa:11de:e4c7 2011-03-16 11:04:53, Joan Pape Rasmussen (jpr), \\eamv-fs1\Privat$\Ansatte\jpr (\\eamv-fs1\Privat$\Ansatte\jpr), M11384, 0.0.0.0 & 10.153.236.90 2011-03-16 11:05:07, John Martin Jørgensen (jmj), \\fs6\privat$\Ansatte\jmj (\\fs6\privat$\Ansatte\jmj), S07834, 10.253.3.12 2011-03-16 11:07:00, 76006 (76006), \\fs2\home$\Studerende\76006 (\\fs2\home$\Studerende\76006), S09482, 10.27.1.17 2011-03-16 11:07:19, Steen Juul Mortensen (sjm), \\fs6\privat$\Ansatte\sjm (\\fs6\privat$\Ansatte\sjm), S09233, 10.62.200.42 2011-03-16 11:09:58, 78747 (78747), \\fs2\home$\studerende\78747 (\\fs2\home$\studerende\78747), S09482, 10.27.1.17 2011-03-16 11:13:13, 76006 (76006), \\fs2\home$\Studerende\76006 (\\fs2\home$\Studerende\76006), S10205, 10.27.1.12 2011-03-16 11:15:30, 60867 (60867), \\fs2\home$\Studerende\60867 (\\fs2\home$\Studerende\60867), M09126, 10.232.44.25 & 0.0.0.0 & 10.232.44.25 2011-03-16 11:15:42, Leif Kloster (lk), \\fs6\privat$\Ansatte\lk (\\fs6\privat$\Ansatte\lk), M09087, 10.5.1.10 & 10.232.32.164 2011-03-16 11:16:53, 43146 (43146), \\fs2\home$\Studerende\43146 (\\fs2\home$\Studerende\43146), S09159, 10.38.1.22 2011-03-16 11:17:14, 103086 (103086), \\fs2\home$\Studerende\103086 (\\fs2\home$\Studerende\103086), S06525, 10.80.4.114 - fe80::34a3:2f03:c4f8:3672 2011-03-16 11:19:48, Lilian Lodal Christensen (llc), \\fs6\privat$\Ansatte\llc (\\fs6\privat$\Ansatte\llc), S07631, 10.8.1.27 2011-03-16 11:21:28, Jens Peter Stou (jps), \\fs6\privat$\Ansatte\jps (\\fs6\privat$\Ansatte\jps), M09197, 0.0.0.0 & 10.232.16.103 2011-03-16 11:22:11, 100379 (100379), \\fs2\home$\Studerende\100379 (\\fs2\home$\Studerende\100379), S07284, 10.12.1.22 2011-03-16 11:27:04, supporten (supporten), \\fs2\home$\IT-administratorer\supporten (\\fs2\home$\IT-administratorer\supporten), M07948, 10.253.3.11 & 0.0.0.0 2011-03-16 11:25:19, 97901 (97901), \\fs2\home$\Studerende\97901 (\\fs2\home$\Studerende\97901), S07895, 10.8.1.25 2011-03-16 11:26:15, Carsten Nielsen (cni), \\fs6\privat$\Ansatte\cni (\\fs6\privat$\Ansatte\cni), S09233, 10.62.200.42 2011-03-16 11:28:09, 78923 (78923), \\fs2\home$\studerende\78923 (\\fs2\home$\studerende\78923), S11603, 10.29.1.14 - fe80::252b:4ec8:15cd:6095 2011-03-16 11:28:36, Pia Brændgaard (pb), \\fs6\privat$\Ansatte\pb (\\fs6\privat$\Ansatte\pb), M10108, 10.232.40.130 - fe80::852c:89ea:67b:2ec 2011-03-16 11:29:02, Bodil Carstensen (bca), \\eamv-fs1\Privat$\Ansatte\bca (\\eamv-fs1\Privat$\Ansatte\bca), M07933, 0.0.0.0 & 10.153.244.91 & 10.153.244.91 2011-03-16 11:32:54, Gisela Hansen (gih), \\fs6\privat$\Ansatte\gih (\\fs6\privat$\Ansatte\gih), S06715, 10.80.4.51 - fe80::40f4:a7c6:16e2:870 2011-03-16 11:33:35, Leif Peder Møller (lm), \\fs6\privat$\Ansatte\lm (\\fs6\privat$\Ansatte\lm), M00154, 0.0.0.0 & 10.232.28.82 2011-03-16 11:34:37, Finn Christensen (fc), \\fs6\privat$\Ansatte\fc (\\fs6\privat$\Ansatte\fc), M11485, 10.232.32.165 - fe80::214a:39d7:a581:a091 2011-03-16 11:35:42, Niels Peter Jørgensen (npj), \\fs6\privat$\Ansatte\npj (\\fs6\privat$\Ansatte\npj), M0-NPJ, 10.60.200.18 - fe80::a90e:2319:c505:f304 & 10.153.236.91 - fe80::5939:75f8:cbcd:d2ad & 169.254.64.162 - fe80::e90a:c102:5806:40a2 & 192.168.224.1 - fe80::21a4:82d7:fa6b:285c 2011-03-16 11:36:43, Claus Gam-Pedersen (cg), \\fs6\privat$\Ansatte\cg (\\fs6\privat$\Ansatte\cg), S06675, 10.80.4.56 - fe80::446f:6206:f4ae:3281 2011-03-16 11:36:54, Bo Munch Jensen (bmj), \\fs6\privat$\Ansatte\bmj (\\fs6\privat$\Ansatte\bmj), M11550, 10.253.3.12 - fe80::fdb3:c259:4bdb:ab25 2011-03-16 11:39:36, 67536 (67536), \\fs2\home$\Studerende\67536 (\\fs2\home$\Studerende\67536), S09160, 10.38.1.12 2011-03-16 11:39:51, Bo Munch Jensen (bmj), \\fs6\privat$\Ansatte\bmj (\\fs6\privat$\Ansatte\bmj), M11550, 10.253.3.12 - fe80::fdb3:c259:4bdb:ab25 2011-03-16 11:42:48, 90233 (90233), \\fs2\home$\studerende\90233 (\\fs2\home$\studerende\90233), S06545, 10.80.2.31 - fe80::78f5:c6e8:64bc:9a93 2011-03-16 11:44:21, Carsten Nielsen (cni), \\fs6\privat$\Ansatte\cni (\\fs6\privat$\Ansatte\cni), S09233, 10.62.200.42 2011-03-16 11:44:33, Morten Østerby Andreasen (moa), \\fs6\privat$\Ansatte\moa (\\fs6\privat$\Ansatte\moa), M10189, 10.232.12.94 - fe80::4129:7cc4:9e39:69fb And here is the script part of the script that i've tried to merge it together with (made by Melba23) $iEnd = UBound($File) - 1 $Noftimes = 0 Do ; Look for a line containing $User $iIndex = _ArraySearch($File, "\" & $User & " ", 0, $iEnd, 0, 1, 0) ; If we found one then add it to the List If Not ($iIndex = -1) Then $sLine = $File[$iIndex] ; Now format it as we require $sLine = StringReplace($sLine, "Homedir: \\fs2\home$\IT-ADM~1\", "") ; get rid of the path info $sLine = StringReplace($sLine, "Homedir: \\fs2\home$\STUDER~1\", "") ; get rid of the path info $sLine = StringReplace($sLine, "Homedir: \\eamv-fs1\Privat$\Ansatte\", "") ; get rid of the path info $sLine = StringReplace($sLine, "Homedir: \\fs6\privat$\Ansatte\", "") ; get rid of the path info $sLine = StringReplace($sLine, ".int", ".int -") $sLine = StringReplace($sLine, "(\\fs6", ",\\fs6") $sLine = StringReplace($sLine, "(", "- ") ; change the opening ( into - $sLine = StringReplace($sLine, ")", "") ; remove the final ) ; Now add to the List contents $sList &= "," & $sLine & ",|" ; Amend the last search element $iEnd = $iIndex - 1 ; if we have reached the top line then exit the search If $iEnd = 0 Then ExitLoop ; Increase the count $Noftimes += 1 Else ; If we found nothing then exit the search ExitLoop EndIf Until $Noftimes = 15 and finaly my failed attempt expandcollapse popup#include <GuiConstantsEx.au3> #include <GuiListView.au3> #Include <File.au3> #Include <Array.au3> ;Opt('MustDeclareVars', 1) _Main() Func _Main() ;Set this to the path of yoor large text file Local $sTextFile = @ScriptDir & "\LargeTextfile.txt" Local $aText, $hListView, $File, $sList, $Noftimes local $User = "bmj" If Not _FileReadToArray($LogFile, $File) Then MsgBox(4096, "Error", " Error reading log to Array error:" & @error) Exit EndIf $iEnd = UBound($File) - 1 $Noftimes = 0 Do ; Look for a line containing $User $iIndex = _ArraySearch($File, "\" & $User & " ", 0, $iEnd, 0, 1, 0) ; If we found one then add it to the List If Not ($iIndex = -1) Then $sLine = $File[$iIndex] ; Now format it as we require $sLine = StringReplace($sLine, "Homedir: \\fs2\home$\IT-ADM~1\", "") ; get rid of the path info $sLine = StringReplace($sLine, "Homedir: \\fs2\home$\STUDER~1\", "") ; get rid of the path info $sLine = StringReplace($sLine, "Homedir: \\eamv-fs1\Privat$\Ansatte\", "") ; get rid of the path info $sLine = StringReplace($sLine, "Homedir: \\fs6\privat$\Ansatte\", "") ; get rid of the path info $sLine = StringReplace($sLine, ".int", ".int -") $sLine = StringReplace($sLine, "(\\fs6", ",\\fs6") $sLine = StringReplace($sLine, "(", "- ") ; change the opening ( into - $sLine = StringReplace($sLine, ")", "") ; remove the final ) ; Now add to the List contents $sList &= "," & $sLine & ",|" ; Amend the last search element $iEnd = $iIndex - 1 ; if we have reached the top line then exit the search If $iEnd = 0 Then ExitLoop ; Increase the count $Noftimes += 1 Else ; If we found nothing then exit the search ExitLoop EndIf Until $Noftimes = 15 ;here is my problem, i can't translate my top result in to something i can use in the bottom half of the script _ArrayAdd($aText, $sList) _ArrayDisplay($aText, "is array?") MsgBox(4096, "is string?", $sList) ; Dim a 2D $aLV_Text array based on how many items are in the $aText array ; We use this array later to add it to the listview. Dim $aLV_Text[$aText[0]][1] ; Loop through the $aText array For $i = 1 To $aText[0] ; String Split each line at the comma Local $aSSL = StringSplit($aText[$i], ",") ; See if we need more collomns in out listview If $aSSL[0] > Ubound($aLV_Text, 2) Then ReDim $aLV_Text[$aText[0]][$aSSL[0]] ;Loop through the Split line and add the new broken up line to $aLV_Text array. For $j = 0 To Ubound($aLV_Text, 2) - 1 $aLV_Text[$i - 1][$j] = $aSSL[$j + 1] Next Next ; Create GUI GUICreate("ListView Add Array", 400, 300) $hListView = GUICtrlCreateListView("", 2, 2, 394, 268) _GUICtrlListView_SetUnicodeFormat($hListView, False) GUISetState() ; Add columns based on how many subitems are in a line For $i = 0 To Ubound($aLV_Text, 2) - 1 If Not $i Then _GUICtrlListView_AddColumn($hListView, "Items ", 100) If $i Then _GUICtrlListView_AddColumn($hListView, "SubItems " & $i, 100) Next ;Set the listview item count based on how many items in the $aLV_Text array, saves the listview calculating structures with every item added _GUICtrlListView_SetItemCount($hListView, Ubound($aLV_Text, 1)) ; Load $aLV_Text array to the listview _GUICtrlListView_AddArray($hListView, $aLV_Text) ; Loop until user exits Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() EndFunc ;==>_Main Edited March 21, 2011 by CartoonDragon
Moderators Melba23 Posted March 16, 2011 Moderators Posted March 16, 2011 Cartoondragon, I only vaguely remember helping you with that script. And having 2 completely unrelated sections does not give much of hint as to what the desired output is supposed to be. You obviously want to parse the file and display it in a ListView. So I suggest you take one line of the file and show which parts you want in each column of the ListView - that way we have a fighting chance to help you! M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
CartoonDragon Posted March 16, 2011 Author Posted March 16, 2011 (edited) Hey Melba32, I'm sorry for being so confusing, the results i'm trying to get is to turn a file filled with lines like this: 2011-03-16 11:04:14, Bo Munch Jensen (bmj), \\fs6\privat$\Ansatte\bmj (\\fs6\privat$\Ansatte\bmj), M11550, 10.253.3.12 - fe80::fdb3:c259:4bdb:ab25 & 10.232.28.50 - fe80::a812:82fa:11de:e4c7 in to a nice output in a listview with coloms and edit out the parts that i don't want and put it in a gui interface, listed up like this: | Time | Name | Initials | Network Drive | Computer name | Ip Address 1 | Ip Address 2 | 2011-03-16 11:04:14 Bo Munch Jensen bmj \\fs6\privat$\Ansatte\bmj M11550 10.253.3.12 10.232.28.50 Having listet only the initials i've searched for, in this case bmj, and show the last 15 entries of his username matched to the computers he's been logged on to with the newest entry at the top showing 15 lines. i was trying my best not to have to re-invent all the differnt parts my script is made up in to, thats why i added the confusment of files to see if i couldn't simply add a connection between the two, because the two scripts put together would do this function. any help would be very much apprisiated Edited March 16, 2011 by CartoonDragon
Moderators Melba23 Posted March 16, 2011 Moderators Posted March 16, 2011 Cartoondragon, If you transfer the data directly from the file to the ListView, it is much easier: expandcollapse popup#include <GUIConstantsEx.au3> #include <File.au3> #Include <GuiListView.au3> Global $aFile, $aLine Global $sInputFile = "Data.txt" ; Read in file _FileReadToArray($sInputFile, $aFile) ; Create GUI $hGUI = GUICreate("Test", 1000, 500) $hListView = GUICtrlCreateListView(" DTG| Name| Initials| Network Drive| Computer| Ip Address 1| Ip Address 2| Ip Address 3| Ip Address 4", _ 10, 10, 980, 400) _GUICtrlListView_SetColumnWidth($hListView, 0, 120) _GUICtrlListView_SetColumnWidth($hListView, 1, 100) _GUICtrlListView_SetColumnWidth($hListView, 2, 75) _GUICtrlListView_SetColumnWidth($hListView, 3, 190) _GUICtrlListView_SetColumnWidth($hListView, 4, 80) _GUICtrlListView_SetColumnWidth($hListView, 5, 85) _GUICtrlListView_SetColumnWidth($hListView, 6, 85) _GUICtrlListView_SetColumnWidth($hListView, 7, 85) _GUICtrlListView_SetColumnWidth($hListView, 8, 85) $hInput = GUICtrlCreateInput("", 10, 430, 200, 20) $hButton = GUICtrlCreateButton("Search", 10, 460, 80, 30) $hLabel = GUICtrlCreateLabel("", 100, 465, 200, 20) GUISetState() While 1 Switch GUIGetMsg() Case $GUI_EVENT_CLOSE Exit Case $hButton $sInits = GUICtrlRead($hInput) If $sInits Then _Display($sInits) EndIf EndSwitch WEnd Func _Display($sInits) ; I seem to remember you only wanted the final few records for an individual $iCount = 0 ; Work through file from bottom to top For $i = $aFile[0] To 1 Step -1 ; Split the line into its separate components $aLine = StringSplit($aFile[$i], ",", 2) ; Check if the initals match the search If StringRegExpReplace($aLine[1], ".*\s\((.+)\)", "$1") = $sInits Then ; Build up the items in the line to fill the ListView $sItems = $aLine[0] & "|" & _ StringRegExpReplace($aLine[1], "(.*)\s\(.+\)", "$1") & "|" & _ StringRegExpReplace($aLine[1], ".*\s\((.+)\)", "$1") & "|" & _ StringRegExpReplace($aLine[2], "(.*)\s\(.+\)", "$1") & "|" & _ $aLine[3] & "|" $aIPs = StringRegExp($aLine[4], "(\d+\.\d+\.\d+\.\d+)", 3) For $j = 0 To UBound($aIPs) - 1 $sItems &= $aIPs[$j] & "|" Next ; Increase the count $iCount += 1 ; If below the limit you want to display then display it If $iCount < 6 Then GUICtrlCreateListViewItem($sItems, $hListView) EndIf Next ; Mention how many were actually found GUICtrlSetData($hLabel, "Total " & $iCount & " records found") EndFunc Please ask if you have any questions. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
CartoonDragon Posted March 16, 2011 Author Posted March 16, 2011 Hello everyone, seems like i managed to get it done, just needed to look more at what i was doing. expandcollapse popup#include <GuiConstantsEx.au3> #include <GuiListView.au3> #Include <File.au3> #Include <Array.au3> ;Opt('MustDeclareVars', 1) _Main() Func _Main() ;Set this to the path of yoor large text file Local $sTextFile = @ScriptDir & "\LargeTextfile.txt" Local $aText, $hListView, $File, $sList, $Noftimes local $User = "bmj" If Not _FileReadToArray($sTextFile, $File) Then MsgBox(4096, "Error", " Error reading log to Array error:" & @error) Exit EndIf $iEnd = UBound($File) - 1 $Noftimes = 0 Do ; Look for a line containing $User $iIndex = _ArraySearch($File, "\" & $User & " ", 0, $iEnd, 0, 1, 0) ; If we found one then add it to the List If Not ($iIndex = -1) Then $sLine = $File[$iIndex] ; Now format it as we require $sLine = StringReplace($sLine, "Homedir: \\fs2\home$\IT-ADM~1\", "") ; get rid of the path info $sLine = StringReplace($sLine, "Homedir: \\fs2\home$\STUDER~1\", "") ; get rid of the path info $sLine = StringReplace($sLine, "Homedir: \\eamv-fs1\Privat$\Ansatte\", "") ; get rid of the path info $sLine = StringReplace($sLine, "Homedir: \\fs6\privat$\Ansatte\", "") ; get rid of the path info $sLine = StringReplace($sLine, ".int", ".int -") $sLine = StringReplace($sLine, "(\\fs6", ",\\fs6") $sLine = StringReplace($sLine, "(", "- ") ; change the opening ( into - $sLine = StringReplace($sLine, ")", "") ; remove the final ) ; Now add to the List contents $sList &= $sLine ;& "|" ; Amend the last search element $iEnd = $iIndex - 1 ; if we have reached the top line then exit the search If $iEnd = 0 Then ExitLoop ; Increase the count $Noftimes += 1 Else ; If we found nothing then exit the search ExitLoop EndIf $sList = $sList & "|" Until $Noftimes = 15 ;here is my problem, i can't translate my top result in to something i can use in the bottom half of the script $aText = StringSplit($sList, "|") _ArrayDisplay($aText, "is array?") MsgBox(4096, "is string?", $sList) ; Dim a 2D $aLV_Text array based on how many items are in the $aText array ; We use this array later to add it to the listview. Dim $aLV_Text[$aText[0]][1] ; Loop through the $aText array For $i = 1 To $aText[0] ; String Split each line at the comma Local $aSSL = StringSplit($aText[$i], ",") ;_ArrayDisplay($aSSL, "is array2?") ; See if we need more collomns in out listview If $aSSL[0] > Ubound($aLV_Text, 2) Then ReDim $aLV_Text[$aText[0]][$aSSL[0]] ;Loop through the Split line and add the new broken up line to $aLV_Text array. For $j = 0 To Ubound($aLV_Text, 2) - 1 $aLV_Text[$i - 1][$j] = $aSSL[$j + 1] Next Next ; Create GUI GUICreate("ListView Add Array", 400, 300) $hListView = GUICtrlCreateListView("", 2, 2, 394, 268) _GUICtrlListView_SetUnicodeFormat($hListView, False) GUISetState() ; Add columns based on how many subitems are in a line For $i = 0 To Ubound($aLV_Text, 2) - 1 If Not $i Then _GUICtrlListView_AddColumn($hListView, "Items ", 100) If $i Then _GUICtrlListView_AddColumn($hListView, "SubItems " & $i, 100) Next ;Set the listview item count based on how many items in the $aLV_Text array, saves the listview calculating structures with every item added _GUICtrlListView_SetItemCount($hListView, Ubound($aLV_Text, 1)) ; Load $aLV_Text array to the listview _GUICtrlListView_AddArray($hListView, $aLV_Text) ; Loop until user exits Do Until GUIGetMsg() = $GUI_EVENT_CLOSE GUIDelete() EndFunc ;==>_Main
CartoonDragon Posted March 16, 2011 Author Posted March 16, 2011 hehe didn't see that you made a reply before i got around to making my new version, gonna go take a look at what you made Melba23 i'll bet it's better than mine hehe
CartoonDragon Posted March 16, 2011 Author Posted March 16, 2011 Wow Melba23 simply wow you are awsome! thank you so much, this looks wonderful
Moderators Melba23 Posted March 16, 2011 Moderators Posted March 16, 2011 Cartoondragon, Glad you like it. No questions - I must be getting better! M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
GEOSoft Posted March 16, 2011 Posted March 16, 2011 I know you don't like RegEx but this will do it too and it's shorter code $sStr = "2011-03-16 11:04:14, Bo Munch Jensen (bmj), \\fs6\privat$\Ansatte\bmj (\\fs6\privat$\Ansatte\bmj), M11550, 10.253.3.12 - fe80::fdb3:c259:4bdb:ab25 & 10.232.28.50 - fe80::a812:82fa:11de:e4c7" & @CRLF $sStr &= "2011-03-16 11:28:14, My Name (mn), \\fs6\privat$\Ansatte\gg(\\fs6\privat$\Ansatte\mn), M12050, 194.168.3.12 - fe80::fdb3:c259:4bdb:ab25 & 168.232.55.50 - fe80::a812:82fa:11de:e4c7" & @CRLF $sStr &= "2011-03-15 09:52:08, Someone Else (se), \\fs6\privat$\Ansatte\se(\\fs6\privat$\Ansatte\se), R22050, 10.168.3.18 - fe80::fdb3:c259:4bdb:ab25 & 10.232.110.10 - fe80::a812:82fa:11de:e4c7" ;; $sStr above can be replaced ith a FileRead() call ;; In The regex replace below we just replace the parts we don't want with "|" which is the default separater for a listview. ;; The RegEx itself just reads each line (after the replace is done) to an array. We can then just loop through the array to create the LVitems. I nested them but that isn't really required. $aData = StringRegExp(StringRegExpReplace($sStr, "(?i)(?m:^)(.+),([\w\s]+)\s*\(([a-z]+)\),.+?\((.+?)\),\s*([a-z0-9]+),\s*([\d.]+).+&\s*([\d.]+)\V*", "$1|$2|$3|$4|$5|$6|$7"), "(?m:^)\V+", 3) If NOT @Error Then GUICreate("Test Window", 600, 400) $hListview = GUICtrlCreateListView("Time|Name|Initials|Network Drive|Computer Name|IP Address|IP Address 2", 10, 10, 580, 350) For $i = 0 To UBound($aData) - 1 GUICtrlCreateListViewItem($aData[$i], $hListview) Next GUISetState() While 1 If GUIGetMsg() = -3 Then Exit WEnd EndIf Of course it can be tuned up with proper sizes and column widths etc. George Question about decompiling code? Read the decompiling FAQ and don't bother posting the question in the forums.Be sure to read and follow the forum rules. -AKA the AutoIt Reading and Comprehension Skills test.*** The PCRE (Regular Expression) ToolKit for AutoIT - (Updated Oct 20, 2011 ver:3.0.1.13) - Please update your current version before filing any bug reports. The installer now includes both 32 and 64 bit versions. No change in version number. Visit my Blog .. currently not active but it will soon be resplendent with news and views. Also please remove any links you may have to my website. it is soon to be closed and replaced with something else. "Old age and treachery will always overcome youth and skill!"
CartoonDragon Posted March 16, 2011 Author Posted March 16, 2011 (edited) Hey Melba23 i finaly got around to find something that doesn't work for me, i used your script on my log file (huuuuuge log file 10mb size) and then your script will crash. (that said i know my log file from time to time have som inconsistancies, but i don't see what would do this to it) S:\Scripts\User Checker\melba23.au3 (66) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.: If StringRegExpReplace($aLine[1], ".*\s\((.+)\)", "$1") = $sInits Then If StringRegExpReplace(^ ERROR it outputs data like it's suppose to, but then after 4-5 seconds the program dies and crashes seemingly the error to me is that it wants to do this function to all of the of the logfile? while i simply want it to do it to the 15 outputs that i want to see Edited March 16, 2011 by CartoonDragon
Moderators Melba23 Posted March 16, 2011 Moderators Posted March 16, 2011 Cartoondragon, it wants to do this function to all of the of the logfile? while i simply want it to do it to the 15 outputs that i want to seeHow do you expect it to extract the lines you want to see if it does not run through all the lines in the file? The line in question extracts the lines of data with the initials you are searching for. The error means that the line could not be parsed. So you need to do one of two things: - 1. Ignore the line. Then you need to change the function like this: expandcollapse popupFunc _Display($sInits) ; I seem to remember you only wanted the final few records for an individual $iCount = 0 ; Work through file from bottom to top For $i = $aFile[0] To 1 Step -1 ; Split the line into its separate components $aLine = StringSplit($aFile[$i], ",", 2) If Not @error Then ; Check if the initals match the search If StringRegExpReplace($aLine[1], ".*\s\((.+)\)", "$1") = $sInits Then ; Build up the items in the line to fill the ListView $sItems = $aLine[0] & "|" & _ StringRegExpReplace($aLine[1], "(.*)\s\(.+\)", "$1") & "|" & _ StringRegExpReplace($aLine[1], ".*\s\((.+)\)", "$1") & "|" & _ StringRegExpReplace($aLine[2], "(.*)\s\(.+\)", "$1") & "|" & _ $aLine[3] & "|" $aIPs = StringRegExp($aLine[4], "(\d+\.\d+\.\d+\.\d+)", 3) For $j = 0 To UBound($aIPs) - 1 $sItems &= $aIPs[$j] & "|" Next ; Increase the count $iCount += 1 ; If below the limit you want to display then display it If $iCount < 6 Then GUICtrlCreateListViewItem($sItems, $hListView) EndIf EndIf Next ; Mention how many were actually found GUICtrlSetData($hLabel, "Total " & $iCount & " records found") EndFunc - 2. Fix your log file so it does not contain lines which cannot be parsed. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
CartoonDragon Posted March 16, 2011 Author Posted March 16, 2011 Hey Melba23 i ended up going with option 2, need to go kick some guy at work tomorrow for putting in "sdfsdfsdfsdfsdf" (empty line) "sdfsdfsdfsdfsdf" in the middle of my log file, tested the new script you postet, worked like a charm ^^ thanks a lot Melba23 you really have a lot of patience.
CartoonDragon Posted March 17, 2011 Author Posted March 17, 2011 Hello Everyone, Trying to re-use Melba23's script to now search for the computer name in the program insted of username, but i belive it's an easy fix, but it didn't quite work like i thought it would. Changing the latest script by Melba23 to look like this but doesn't work. expandcollapse popupFunc _Display($sInits) ; I seem to remember you only wanted the final few records for an individual $iCount = 0 ; Work through file from bottom to top For $i = $aFile[0] To 1 Step -1 ; Split the line into its separate components $aLine = StringSplit($aFile[$i], ",", 2) If Not @error Then ; Check if the initals match the search ;----------------------------------The only change in the script------------------ ;If StringRegExpReplace($aLine[1], ".*\s\((.+)\)", "$1") = $sInits Then If $aLine[3] = $sInits Then ;----------------------------------Change complet--------------------------------- ; Build up the items in the line to fill the ListView $sItems = $aLine[0] & "|" & _ StringRegExpReplace($aLine[1], "(.*)\s\(.+\)", "$1") & "|" & _ StringRegExpReplace($aLine[1], ".*\s\((.+)\)", "$1") & "|" & _ StringRegExpReplace($aLine[2], "(.*)\s\(.+\)", "$1") & "|" & _ $aLine[3] & "|" $aIPs = StringRegExp($aLine[4], "(\d+\.\d+\.\d+\.\d+)", 3) For $j = 0 To UBound($aIPs) - 1 $sItems &= $aIPs[$j] & "|" Next ; Increase the count $iCount += 1 ; If below the limit you want to display then display it If $iCount < 6 Then GUICtrlCreateListViewItem($sItems, $hListView) EndIf EndIf Next ; Mention how many were actually found GUICtrlSetData($hLabel, "Total " & $iCount & " records found") EndFunc now in my mind, $aLine[3] = the computer name from my list, but it's in array format and i need it in a string, any good ideas?
CartoonDragon Posted March 17, 2011 Author Posted March 17, 2011 Hello Everyone, Trying to re-use Melba23's script to now search for the computer name in the program insted of username, but i belive it's an easy fix, but it didn't quite work like i thought it would. Changing the latest script by Melba23 to look like this but doesn't work. expandcollapse popupFunc _Display($sInits) ; I seem to remember you only wanted the final few records for an individual $iCount = 0 ; Work through file from bottom to top For $i = $aFile[0] To 1 Step -1 ; Split the line into its separate components $aLine = StringSplit($aFile[$i], ",", 2) If Not @error Then ; Check if the initals match the search ;----------------------------------The only change in the script------------------ ;If StringRegExpReplace($aLine[1], ".*\s\((.+)\)", "$1") = $sInits Then If $aLine[3] = $sInits Then ;----------------------------------Change complet--------------------------------- ; Build up the items in the line to fill the ListView $sItems = $aLine[0] & "|" & _ StringRegExpReplace($aLine[1], "(.*)\s\(.+\)", "$1") & "|" & _ StringRegExpReplace($aLine[1], ".*\s\((.+)\)", "$1") & "|" & _ StringRegExpReplace($aLine[2], "(.*)\s\(.+\)", "$1") & "|" & _ $aLine[3] & "|" $aIPs = StringRegExp($aLine[4], "(\d+\.\d+\.\d+\.\d+)", 3) For $j = 0 To UBound($aIPs) - 1 $sItems &= $aIPs[$j] & "|" Next ; Increase the count $iCount += 1 ; If below the limit you want to display then display it If $iCount < 6 Then GUICtrlCreateListViewItem($sItems, $hListView) EndIf EndIf Next ; Mention how many were actually found GUICtrlSetData($hLabel, "Total " & $iCount & " records found") EndFunc now in my mind, $aLine[3] = the computer name from my list, but it's in array format and i need it in a string, any good ideas? Yep, figured out there was a single empty space infront of the text in $aLine[3]
Moderators Melba23 Posted March 17, 2011 Moderators Posted March 17, 2011 Cartoondragon,StringStripWS might be useful then. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
CartoonDragon Posted March 17, 2011 Author Posted March 17, 2011 (edited) Melba23, sorry to bother again for such a simple thing, but i was thinking that you know a smart way of doing this, i'm using the following command to load my logfile in to my script: If Not _FileReadToArray($LogFile, $aFile) Then MsgBox(4096, "Error", " Error reading log to Array error:" & @error) Exit EndIf But i want to put it in a function, so if it's already loaded in to the script, not to do it again, because i don't want it to read the logfile untill i push the button the first time, to save the initial load time, because i need to load 3 log files all in all. Edited March 17, 2011 by CartoonDragon
Moderators Melba23 Posted March 17, 2011 Moderators Posted March 17, 2011 Cartoondragon, The correct decision - keep SREs until you really need them. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
CartoonDragon Posted March 17, 2011 Author Posted March 17, 2011 Melba23, now that was a quick responce, but uhm... sorry but how would you make such a function to see if it has already been loaded, i thought i could check if there was something in $aFile with a simple command, like so: if $aFile Then MsgBox(4096, "$aFile true?", "Yes") Else MsgBox(4096, "$aFile true?", "No") EndIf but the answer is always no, the only other thing i can think of is to add another value and test if that is yes or no, like so: If Not _FileReadToArray($LogFile, $aFile) Then MsgBox(4096, "Error", " Error reading log to Array error:" & @error) else $aFileload = True Exit EndIf if $aFileload Then MsgBox(4096, "$aFileload true?", "Yes") Else MsgBox(4096, "$aFileload true?", "No") EndIf but this looks....like there is a much smarter way of doing it?
CartoonDragon Posted March 17, 2011 Author Posted March 17, 2011 Melba23, This gets the job done *facepalm* so unless there is something way smarter, i'ma gonna go with this i guess if $aFile = "" Then MsgBox(4096, "$aFileload true?", "Yes") Else MsgBox(4096, "$aFileload true?", "No") EndIf
Moderators Melba23 Posted March 17, 2011 Moderators Posted March 17, 2011 Cartoondragon,That is a perfectly good check. Another would be to use UBound and see if you get a return. M23P.S. There is an "Edit" button for each post, by the way. Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now