nitekram Posted May 13, 2013 Posted May 13, 2013 (edited) Cannot get my head around this...I have an array of X, and in that array each index has 3 parts, I need to find the unique indexes of the main array so main array would be[0] ???|abc|down[1] ???|abc|downorflapping[2] ???|ccc|ccc[3] ???|ddd|ddd[4] ???|xyz|down[5] ???|xyz|unresponsive so that is the array that comes in, and I think I need to break that up in another array and then compare it to each other, but I am not able to get my head around it...the first element does not matter, but if the second element is found anywhere else in the main array, I need to take only one of them, I would like that to be a variable passed, that way I can call it more then once and get the unique values I am looking for...Anyone got an idea? I have tried many different ways but cannot seem to get it rightexpandcollapse popup$aListAlerts[6] = ["???|abc|down", "???|abc|downorflapping", "???|ccc|ccc", "???|ddd|ddd", "???|xyz|down", "???|xyz|unresponsive"] _ArrayDisplay($aListAlerts, 'all alerts') Local $aNewArray[2] For $x = 0 To UBound($aListAlerts) - 1 Local $aTestArray = StringSplit($aListAlerts[$x], '|', 2) If UBound($aTestArray) <= 1 Then ContinueLoop ConsoleWrite($x & ' X ' & $aListAlerts[$x] & @CRLF) For $y = 0 To UBound($aListAlerts) - 1 If $y = $x Then ContinueLoop If StringInStr($aListAlerts[$y], $aTestArray[1]) Then Local $aTestArray2 = StringSplit($aListAlerts[$y], '|', 2) ConsoleWrite($y & ' Y ' & $aListAlerts[$y] & @CRLF) If UBound($aTestArray2) <= 1 Then ContinueLoop If $aTestArray2[2] <> $aTestArray[2] Then If $aTestArray2[2] = 'Down' Then If $aTestArray[2] = 'DownOrFlapping' Then If _ArraySearch($aNewArray, $aListAlerts[$x]) <> @error Then _ArrayAdd($aNewArray, $aListAlerts[$x]) ExitLoop EndIf EndIf ElseIf $aTestArray2[2] = 'DownOrFlapping' Then If $aTestArray[2] = 'Down' Then If _ArraySearch($aNewArray, $aListAlerts[$x]) <> @error Then _ArrayAdd($aNewArray, $aListAlerts[$x]) ExitLoop EndIf EndIf Else If _ArraySearch($aNewArray, $aListAlerts[$x]) = @error Then _ArrayAdd($aNewArray, $aListAlerts[$x]) ExitLoop EndIf EndIf EndIf EndIf Next Next _ArrayDisplay($aNewArray) edit does not look like tags are working?edit - learned how to post code yea Edited May 15, 2013 by nitekram 2¢ All by me:"Sometimes you have to go back to where you started, to get to where you want to go." "Everybody catches up with everyone, eventually" "As you teach others, you are really teaching yourself." From my dad "Do not worry about yesterday, as the only thing that you can control is tomorrow." WIKI | Tabs; | Arrays; | Strings | Wiki Arrays | How to ask a Question | Forum Search | FAQ | Tutorials | Original FAQ | ONLINE HELP | UDF's Wiki | AutoIt PDF AutoIt Snippets | Multple Guis | Interrupting a running function | Another Send StringRegExp | StringRegExp Help | RegEXTester | REG TUTOR | Reg TUTOT 2 AutoItSetOption | Macros | AutoIt Snippets | Wrapper | Autoit Docs SCITE | SciteJump | BB | MyTopics | Programming | UDFs | AutoIt 123 | UDFs Form | UDF Learning to script | Tutorials | Documentation | IE.AU3 | Games? | FreeSoftware | Path_Online | Core Language Programming Tips Excel Changes ControlHover.UDF GDI_Plus Draw_On_Screen GDI Basics GDI_More_Basics GDI Rotate GDI Graph GDI CheckExistingItems GDI Trajectory Replace $ghGDIPDll with $__g_hGDIPDll DLL 101? Array via Object GDI Swimlane GDI Plus French 101 Site GDI Examples UEZ GDI Basic Clock GDI Detection Ternary operator
guinness Posted May 13, 2013 Posted May 13, 2013 What about _ArrayUnique? UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018
nitekram Posted May 13, 2013 Author Posted May 13, 2013 I do not think that will work, unless I read it wrong. I want to find the element with the letters that match and then find out if there is a matching one and only return one. As each of the elements in the main array are unique - it would just return my main array? 2¢ All by me:"Sometimes you have to go back to where you started, to get to where you want to go." "Everybody catches up with everyone, eventually" "As you teach others, you are really teaching yourself." From my dad "Do not worry about yesterday, as the only thing that you can control is tomorrow." WIKI | Tabs; | Arrays; | Strings | Wiki Arrays | How to ask a Question | Forum Search | FAQ | Tutorials | Original FAQ | ONLINE HELP | UDF's Wiki | AutoIt PDF AutoIt Snippets | Multple Guis | Interrupting a running function | Another Send StringRegExp | StringRegExp Help | RegEXTester | REG TUTOR | Reg TUTOT 2 AutoItSetOption | Macros | AutoIt Snippets | Wrapper | Autoit Docs SCITE | SciteJump | BB | MyTopics | Programming | UDFs | AutoIt 123 | UDFs Form | UDF Learning to script | Tutorials | Documentation | IE.AU3 | Games? | FreeSoftware | Path_Online | Core Language Programming Tips Excel Changes ControlHover.UDF GDI_Plus Draw_On_Screen GDI Basics GDI_More_Basics GDI Rotate GDI Graph GDI CheckExistingItems GDI Trajectory Replace $ghGDIPDll with $__g_hGDIPDll DLL 101? Array via Object GDI Swimlane GDI Plus French 101 Site GDI Examples UEZ GDI Basic Clock GDI Detection Ternary operator
kylomas Posted May 14, 2013 Posted May 14, 2013 (edited) I need to take only one of them Which one?? Edited May 14, 2013 by kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill
kylomas Posted May 14, 2013 Posted May 14, 2013 (edited) nitekran, Try something like this (just displays hit results) #include <array.au3> local $aMain[6] = [ '???|abc|down', _ '???|abc|downorflapping', _ '???|ccc|ccc', _ '???|ddd|ddd', _ '???|xyz|down', _ '???|xyz|unresponsive' ] ; create and populate interim 2D array local $aTmp[6][2] for $1 = 0 to ubound($aMain) - 1 $a10 = stringsplit($aMain[$1],'|') $aTmp[$1][0] = $a10[2] $aTmp[$1][1] = $a10[3] Next ; compare each element to every other element - produce hit coordinates of elements for $1 = 0 to ubound($aTmp,1) - 1 for $2 = 0 to ubound($aTmp,2) - 1 for $3 = 0 to ubound($aTmp,1) - 1 for $4 = 0 to ubound($aTmp,2) - 1 if $aTmp[$1][$2] = $aTmp[$3][$4] then ConsoleWrite(stringformat('ele [%02i][%02i] = %-15s matches ele [%02i][%02i] = %-15s',$1,$2,$aTmp[$1][$2],$3,$4,$aTmp[$3][$4]) & @LF) EndIf Next Next Next Next kylomas edit: cleaned up / commented code Edited May 14, 2013 by kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill
kylomas Posted May 14, 2013 Posted May 14, 2013 Or using an extended array search UDF (doh! just worked on this and forgot about it!) expandcollapse popup#include <array.au3> local $aMain[6] = [ '???|abc|down', _ '???|abc|downorflapping', _ '???|ccc|ccc', _ '???|ddd|ddd', _ '???|xyz|down', _ '???|xyz|unresponsive' ] ; create and populate interim 2D array local $aTmp[6][2] for $1 = 0 to ubound($aMain) - 1 $a10 = stringsplit($aMain[$1],'|') $aTmp[$1][0] = $a10[2] $aTmp[$1][1] = $a10[3] Next ; compare each element to every other element - produce hit coordinates of elements for $1 = 0 to ubound($aTmp,1) - 1 for $2 = 0 to ubound($aTmp,2) - 1 $a10 = _arrayfindallex($aTmp,$aTmp[$1][$2]) ConsoleWrite($aTmp[$1][$2] & ' Found at ' & @lf) for $i = 0 to ubound($a10) - 1 ConsoleWrite(@tab & $a10[$i][0] & @lf) Next next Next #region Functions #include-once ; #INDEX# ======================================================================================================================= ; Title .........: Array Functions Not in General Distribution ; AutoIt Version : 3.3.8.1 ; Language ......: English ; Description ...: Collection of array functions that do not exist or can be enhanced (suffixed with "ex") ; =============================================================================================================================== ; #CURRENT# ===================================================================================================================== ;_ArrayDeleteColumn_Function ;_ArrayFindAll_Function ; =============================================================================================================================== ; #FUNCTION# ==================================================================================================================== ; Name...........: _ArrayDeleteColumn ; Description ...: Deletes Any Column of a 2 Dimensional Array ; Syntax.........: _ArrayDeleteColumn(Byref $avSourceArray,$Col = 1) ; Parameters ....: $avSourceArray - [Byref] A 2 dimensional array of any number of columns. ; $iCol - Integer number of the column that you want to delete. ; Return values .: Success - @error is set to 0 and an array minus the column to delete is returned. ; Failure - @error is set to one of the following: ; 1 - Parameter 1 is not a 2 dimensional array ; |2 - Parameter 2 is not a number ; |3 - Column to delete does not exist in the source array. ; Author ........: kylomas ; Modified.......: 05/03/2013 ; Remarks .......: Version 1.0.0 ; Example .......: Yes ; =============================================================================================================================== Func _ArrayDeleteColumn(ByRef $avSourceArray, $iCol = 1) ; flush the parms If $iCol = -1 Or $iCol = Default Then $iCol = 1 If UBound($avSourceArray, 0) <> 2 Then Return SetError(1) If Not IsNumber($iCol) And Not StringIsDigit($iCol) Then Return SetError(2) If $iCol > UBound($avSourceArray, 2) Or $iCol < 1 Then Return SetError(3) ; define receiving array with 2ND dimension - 1 Local $aRet[UBound($avSourceArray, 1)][UBound($avSourceArray, 2) - 1] ; populate receiving array For $1 = 0 To UBound($aRet, 1) - 1 For $2 = 0 To UBound($aRet, 2) - 1 If $2 >= $iCol Then $aRet[$1][$2] = $avSourceArray[$1][$2 + 1] Else $aRet[$1][$2] = $avSourceArray[$1][$2] EndIf Next Next Return SetError(0, 0, $aRet) EndFunc ;==>_ArrayDeleteColumn ; #FUNCTION# ==================================================================================================================== ; Name...........: _ArrayFindAllex ; Description ...: Searches each element in an array for a value based on supplied parameters. ; Syntax.........: _ArrayFindAll(Byref $avSourceArray,$sSearchString,$iSearchType=1,$iCaseSense=0) ; Parameters ....: $avSourceArray - [Byref] A 1 dimensional array. ; $sSearchString - The string to search for. ; $iSearchType - 0 = match if element contains the search string ; | 1 = match if element is equal to the search string (default) ; | 2 = match if element starts with the search string ; | 3 = match if element ends with search string ; $iCaseSense - 0 = match is not case sensitive (default) ; | 1 = match is case sensitive ; $sSrchArgSepStr - A string of user supplied characters used to seperate multiple search arguments (Default is -1) ; Return values .: Success - @error is set to 0. Return a 2D array of ; | [n][0] - The element number that the string was found in ; | [n][1] - The search string ; | [n][2] - The value found at that element ; Failure - @error is set to one of the following: ; 1 - Parameter 1 is not an array ; | 2 - Search type is invalid ; | 3 - Case sense is invalid ; | 4 - Source array is more than 2 dimensions ; | 5 - Search string not found ; Author ........: kylomas ; Modified.......: 05/03/2013 ; Remarks .......: Version 1.0.0 ; Example .......: Yes ; =============================================================================================================================== Func _ArrayFindAllex(ByRef $avSourceArray, $sSearchString, $iSearchType = 1, $iCaseSense = 0, $sSrchArgSepString = -1) ; set parm defaults If $iSearchType = Default Or $iSearchType = -1 Then $iSearchType = 1 If $iCaseSense = Default Or $iCaseSense = -1 Then $iCaseSense = 0 If $iCaseSense = Default Or $iCaseSense = -1 Then $iCaseSense = 0 If $sSrchArgSepString = Default Then $sSrchArgSepChar = -1 ; check parameters If Not IsArray($avSourceArray) Then Return SetError(1) If $iSearchType < 0 Or $iSearchType > 3 Then Return SetError(2) If $iCaseSense <> 0 And $iCaseSense <> 1 Then Return SetError(3) ; check for multiple search arguments If $sSrchArgSepString <> -1 Then If StringInStr($sSearchString, $sSrchArgSepString) > 0 Then $aSearchString = StringSplit($sSearchString, $sSrchArgSepString, 3) EndIf Else Local $aSearchString[1] $aSearchString[0] = $sSearchString EndIf ; setup work vars Local $sTmp, $iElementNumber = 0, $sSaveSearchString = '' If UBound($avSourceArray, 0) = 2 Then Local $aTmp[UBound($avSourceArray, 1) * UBound($avSourceArray, 2) + 80][3] If UBound($avSourceArray, 0) = 1 Then Local $aTmp[UBound($avSourceArray, 1) + 80][3] For $i = 0 To UBound($aSearchString) - 1 ; save original search argument, escape reserved characters and construct pattern based on parms $sSaveSearchString = $aSearchString[$i] $aSearchString[$i] = StringRegExpReplace($aSearchString[$i], '[\^\.\*\?\$\[\]\(\)\\\|]', '\\$0') ; construct search argument Switch $iSearchType Case 0 If $iCaseSense = 0 Then $aSearchString[$i] = '(?is)' & $aSearchString[$i] If $iCaseSense = 1 Then $aSearchString[$i] = '(?s)' & $aSearchString[$i] Case 1 If $iCaseSense = 0 Then $aSearchString[$i] = '(?i)^' & $aSearchString[$i] & '$' If $iCaseSense = 1 Then $aSearchString[$i] = '^' & $aSearchString[$i] & '$' Case 2 If $iCaseSense = 0 Then $aSearchString[$i] = '(?is)^' & $aSearchString[$i] If $iCaseSense = 1 Then $aSearchString[$i] = '(?s)^' & $aSearchString[$i] Case 3 If $iCaseSense = 0 Then $aSearchString[$i] = '(?is)' & $aSearchString[$i] & '$' If $iCaseSense = 1 Then $aSearchString[$i] = '(?s)' & $aSearchString[$i] & '$' EndSwitch ; main loop Switch UBound($avSourceArray, 0) Case 1 For $1 = 0 To UBound($avSourceArray, 1) - 1 If StringRegExp($avSourceArray[$1], $aSearchString[$i]) = 1 Then $aTmp[$iElementNumber][0] = $1 $aTmp[$iElementNumber][1] = $sSaveSearchString $aTmp[$iElementNumber][2] = $avSourceArray[$1] $iElementNumber += 1 EndIf Next Case 2 For $1 = 0 To UBound($avSourceArray, 1) - 1 For $2 = 0 To UBound($avSourceArray, 2) - 1 If StringRegExp($avSourceArray[$1][$2], $aSearchString[$i]) = 1 Then $aTmp[$iElementNumber][0] = 'ROW ' & $1 & ' - ' & 'COL ' & $2 $aTmp[$iElementNumber][1] = $sSaveSearchString $aTmp[$iElementNumber][2] = $avSourceArray[$1][$2] $iElementNumber += 1 EndIf Next Next Case Else Return SetError(4) EndSwitch Next ; find # of hits Local $iRowCount = 0 For $1 = 0 To UBound($aTmp) - 1 If StringLen($aTmp[$1][0]) > 0 Then ContinueLoop $iRowCount = $1 ExitLoop Next ; if string not found @error = 5 If $iRowCount = 0 Then Return SetError(5) ; shrink result array and return results ReDim $aTmp[$iRowCount][3] Return SetError(0, 0, $aTmp) EndFunc ;==>_ArrayFindAllex #endregion Functions kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill
guinness Posted May 14, 2013 Posted May 14, 2013 I do not think that will work, unless I read it wrong. I was thinking you could use the code as an example. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018
nitekram Posted May 14, 2013 Author Posted May 14, 2013 Thanks for your help @kylomas. I will look at your examples and see if I can get my head around them. 2¢ All by me:"Sometimes you have to go back to where you started, to get to where you want to go." "Everybody catches up with everyone, eventually" "As you teach others, you are really teaching yourself." From my dad "Do not worry about yesterday, as the only thing that you can control is tomorrow." WIKI | Tabs; | Arrays; | Strings | Wiki Arrays | How to ask a Question | Forum Search | FAQ | Tutorials | Original FAQ | ONLINE HELP | UDF's Wiki | AutoIt PDF AutoIt Snippets | Multple Guis | Interrupting a running function | Another Send StringRegExp | StringRegExp Help | RegEXTester | REG TUTOR | Reg TUTOT 2 AutoItSetOption | Macros | AutoIt Snippets | Wrapper | Autoit Docs SCITE | SciteJump | BB | MyTopics | Programming | UDFs | AutoIt 123 | UDFs Form | UDF Learning to script | Tutorials | Documentation | IE.AU3 | Games? | FreeSoftware | Path_Online | Core Language Programming Tips Excel Changes ControlHover.UDF GDI_Plus Draw_On_Screen GDI Basics GDI_More_Basics GDI Rotate GDI Graph GDI CheckExistingItems GDI Trajectory Replace $ghGDIPDll with $__g_hGDIPDll DLL 101? Array via Object GDI Swimlane GDI Plus French 101 Site GDI Examples UEZ GDI Basic Clock GDI Detection Ternary operator
nitekram Posted May 15, 2013 Author Posted May 15, 2013 (edited) I came up with this: wondering if I can make it better? expandcollapse popup#include <array.au3> ;#include <File.au3> Local $aMain[6] = ['???|abc|downorflapping', _ '???|abc|down', _ '???|ccc|ccc', _ '???|ddd|ddd', _ '???|xyz|down', _ '???|xyz|unresponsive'] ; create and populate interim 2D array Local $aAlertInfo[6][3] For $1 = 0 To UBound($aMain) - 1 $a10 = StringSplit($aMain[$1], '|') $aAlertInfo[$1][0] = $a10[2] ; alert $aAlertInfo[$1][1] = $a10[3] ; event $aAlertInfo[$1][2] = $a10[1] ; class Next _ArrayDisplay($aAlertInfo, 'all') Local $aNewArray[2][3] Local $icount = 0, $bPass = True Local $RemoveWords = 'DownOrFlapping,UnResponsive' For $x = 0 To UBound($aAlertInfo, 1) - 1 For $y = 0 To UBound($aAlertInfo, 1) - 1 If $aAlertInfo[$x][0] = $aAlertInfo[$y][0] And $aAlertInfo[$x][1] <> $aAlertInfo[$y][1] Then If StringInStr($RemoveWords, $aAlertInfo[$x][1]) And $aAlertInfo[$x][1] <> 'Down' Then $bPass = False Else $bPass = True EndIf If Not $bPass Then ContinueLoop ; If _ArraySearch($aNewArray, $aAlertInfo[$x][0], 0, 0, 0, 0, 1, 1) = -1 Then If UBound($aNewArray, 1) > 0 And UBound($aNewArray, 1) <= 2 Then ConsoleWrite('... ' & $icount & '*' & UBound($aNewArray, 1) & @CRLF) ;ConsoleWrite('!> ADD ' & @CRLF) ConsoleWrite(UBound($aNewArray, 1) & @CRLF) $aNewArray[$icount][0] = $aAlertInfo[$x][2] ;class $aNewArray[$icount][1] = $aAlertInfo[$x][0] ;alert $aNewArray[$icount][2] = $aAlertInfo[$x][1] ;event $icount += 1 $bPass = False EndIf EndIf ElseIf $aAlertInfo[$y][0] = $aAlertInfo[$x][0] And $aAlertInfo[$y][1] = $aAlertInfo[$x][1] _ And _ArraySearch($aNewArray, $aAlertInfo[$x][0], 0, 0, 0, 0, 1, 1) = -1 _ And _ArraySearch($aNewArray, $aAlertInfo[$y][0], 0, 0, 0, 0, 1, 1) = -1 Then If StringInStr($RemoveWords, $aAlertInfo[$x][1]) And $aAlertInfo[$x][1] <> 'Down' Then $bPass = False Else $bPass = True EndIf If Not $bPass Then ContinueLoop ; $icount += 1 ReDim $aNewArray[$icount][3] ;ConsoleWrite('... ' & $icount & @CRLF) ;ConsoleWrite('!> ADD ' & @CRLF) $aNewArray[$icount - 1][0] = $aAlertInfo[$x][2] $aNewArray[$icount - 1][1] = $aAlertInfo[$x][0] ; need the minus 1 to account for the ZERO index $aNewArray[$icount - 1][2] = $aAlertInfo[$x][1] $bPass = False EndIf Next Next _ArrayDisplay($aNewArray, 'Unique Alerts') ;_FileWriteFromArray('!testing.txt', $aNewArray) Edited May 15, 2013 by nitekram 2¢ All by me:"Sometimes you have to go back to where you started, to get to where you want to go." "Everybody catches up with everyone, eventually" "As you teach others, you are really teaching yourself." From my dad "Do not worry about yesterday, as the only thing that you can control is tomorrow." WIKI | Tabs; | Arrays; | Strings | Wiki Arrays | How to ask a Question | Forum Search | FAQ | Tutorials | Original FAQ | ONLINE HELP | UDF's Wiki | AutoIt PDF AutoIt Snippets | Multple Guis | Interrupting a running function | Another Send StringRegExp | StringRegExp Help | RegEXTester | REG TUTOR | Reg TUTOT 2 AutoItSetOption | Macros | AutoIt Snippets | Wrapper | Autoit Docs SCITE | SciteJump | BB | MyTopics | Programming | UDFs | AutoIt 123 | UDFs Form | UDF Learning to script | Tutorials | Documentation | IE.AU3 | Games? | FreeSoftware | Path_Online | Core Language Programming Tips Excel Changes ControlHover.UDF GDI_Plus Draw_On_Screen GDI Basics GDI_More_Basics GDI Rotate GDI Graph GDI CheckExistingItems GDI Trajectory Replace $ghGDIPDll with $__g_hGDIPDll DLL 101? Array via Object GDI Swimlane GDI Plus French 101 Site GDI Examples UEZ GDI Basic Clock GDI Detection Ternary operator
mikell Posted May 15, 2013 Posted May 15, 2013 (edited) Assuming that 'downorflapping' and 'unresponsive' come after 'down' if sorted, maybe this can do the work, sort of #include <array.au3> ;#include <File.au3> Local $aMain[6] = ['???|abc|downorflapping', _ '???|abc|down', _ '???|ccc|ccc', _ '???|ddd|ddd', _ '???|xyz|down', _ '???|xyz|unresponsive'] ;_ArrayDisplay($aMain) _ArraySort($aMain) ;_ArrayDisplay($aMain) For $i = Ubound($aMain)-1 to 1 step -1 $current = StringRegExpReplace($aMain[$i], '.+?\|(.*?)\|.+', "$1") $prev = StringRegExpReplace($aMain[$i-1], '.+?\|(.*?)\|.+', "$1") If $current = $prev Then _ArrayDelete($aMain, $i) Next _ArrayDisplay($aMain) Edited May 15, 2013 by mikell
nitekram Posted May 15, 2013 Author Posted May 15, 2013 That works as long as I change my array to have the second element first and the first element last - not a big deal to change. I did not think the first element would be a problem (stupid me for thinking that), so I chose not to post, but here would be an example:Local $aMain[6] = ['host|abc|downorflapping', _ 'port|xyz|unresponsive', _ 'host|abc|down', _ 'router|ccc|ccc', _ 'switch|ddd|ddd', _ 'TrunkCable|xyz|down']I do have a question though, as I understand most of the code. But I am lost when I see REGEXP, the things you guys put in there make me feel like I am reading Greek. I always get lost in those. Can you dumb it down for the none Greek readers? 2¢ All by me:"Sometimes you have to go back to where you started, to get to where you want to go." "Everybody catches up with everyone, eventually" "As you teach others, you are really teaching yourself." From my dad "Do not worry about yesterday, as the only thing that you can control is tomorrow." WIKI | Tabs; | Arrays; | Strings | Wiki Arrays | How to ask a Question | Forum Search | FAQ | Tutorials | Original FAQ | ONLINE HELP | UDF's Wiki | AutoIt PDF AutoIt Snippets | Multple Guis | Interrupting a running function | Another Send StringRegExp | StringRegExp Help | RegEXTester | REG TUTOR | Reg TUTOT 2 AutoItSetOption | Macros | AutoIt Snippets | Wrapper | Autoit Docs SCITE | SciteJump | BB | MyTopics | Programming | UDFs | AutoIt 123 | UDFs Form | UDF Learning to script | Tutorials | Documentation | IE.AU3 | Games? | FreeSoftware | Path_Online | Core Language Programming Tips Excel Changes ControlHover.UDF GDI_Plus Draw_On_Screen GDI Basics GDI_More_Basics GDI Rotate GDI Graph GDI CheckExistingItems GDI Trajectory Replace $ghGDIPDll with $__g_hGDIPDll DLL 101? Array via Object GDI Swimlane GDI Plus French 101 Site GDI Examples UEZ GDI Basic Clock GDI Detection Ternary operator
UEZ Posted May 15, 2013 Posted May 15, 2013 That works as long as I change my array to have the second element first and the first element last - not a big deal to change. I did not think the first element would be a problem (stupid me for thinking that), so I chose not to post, but here would be an example: Local $aMain[6] = ['host|abc|downorflapping', _ 'port|xyz|unresponsive', _ 'host|abc|down', _ 'router|ccc|ccc', _ 'switch|ddd|ddd', _ 'TrunkCable|xyz|down'] I do have a question though, as I understand most of the code. But I am lost when I see REGEXP, the things you guys put in there make me feel like I am reading Greek. I always get lost in those. Can you dumb it down for the none Greek readers? Can you give an example how the result should look like? Br, UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ
mikell Posted May 15, 2013 Posted May 15, 2013 So something like this then ? #include <array.au3> Local $aMain[6] = ['host|abc|downorflapping', _ 'port|xyz|unresponsive', _ 'host|abc|down', _ 'router|ccc|ccc', _ 'switch|ddd|ddd', _ 'TrunkCable|xyz|down'] ; create and populate interim 2D array Local $aAlertInfo[6][3] For $1 = 0 To UBound($aMain) - 1 $a10 = StringSplit($aMain[$1], '|') $aAlertInfo[$1][0] = $a10[2] ; alert $aAlertInfo[$1][1] = $a10[3] ; event $aAlertInfo[$1][2] = $a10[1] ; class Next _ArrayDisplay($aAlertInfo, 'all') _ArraySort($aAlertInfo) _ArrayDisplay($aAlertInfo, 'sorted') For $i = Ubound($aMain)-1 to 1 step -1 $current = $aAlertInfo[$i][0] & $aAlertInfo[$i][2] $prev = $aAlertInfo[$i-1][0] & $aAlertInfo[$i-1][2] If $current = $prev Then _ArrayDelete($aAlertInfo, $i) Next _ArrayDisplay($aAlertInfo)
nitekram Posted May 17, 2013 Author Posted May 17, 2013 The list should contain only 4 items, I am trying to remove the duplicates. I just came up with another condition - if only one is in the list it needs to be in the final array. This is what I am looking for: host|abc|down router|ccc|ccc switch|ddd|ddd TrunkCable|xyz|down But if the list were this: ['host|abc|downorflapping', _ 'port|xyz|unresponsive', _ 'router|ccc|ccc', _ 'switch|ddd|ddd', _ 'TrunkCable|xyz|down'] I would want my output to be: Notice how there is not a duplicate (index 2) for abc, so I would still want to pick that one up in my list as well. Meaning, sometimes the alert comes in just with 'downorflapping' and not another one for 'down'. I am still working on this, if anyone has an idea on how to proceed - that would be great. host|abc|downorflapping router|ccc|ccc switch|ddd|ddd _ TrunkCable|xyz|down 2¢ All by me:"Sometimes you have to go back to where you started, to get to where you want to go." "Everybody catches up with everyone, eventually" "As you teach others, you are really teaching yourself." From my dad "Do not worry about yesterday, as the only thing that you can control is tomorrow." WIKI | Tabs; | Arrays; | Strings | Wiki Arrays | How to ask a Question | Forum Search | FAQ | Tutorials | Original FAQ | ONLINE HELP | UDF's Wiki | AutoIt PDF AutoIt Snippets | Multple Guis | Interrupting a running function | Another Send StringRegExp | StringRegExp Help | RegEXTester | REG TUTOR | Reg TUTOT 2 AutoItSetOption | Macros | AutoIt Snippets | Wrapper | Autoit Docs SCITE | SciteJump | BB | MyTopics | Programming | UDFs | AutoIt 123 | UDFs Form | UDF Learning to script | Tutorials | Documentation | IE.AU3 | Games? | FreeSoftware | Path_Online | Core Language Programming Tips Excel Changes ControlHover.UDF GDI_Plus Draw_On_Screen GDI Basics GDI_More_Basics GDI Rotate GDI Graph GDI CheckExistingItems GDI Trajectory Replace $ghGDIPDll with $__g_hGDIPDll DLL 101? Array via Object GDI Swimlane GDI Plus French 101 Site GDI Examples UEZ GDI Basic Clock GDI Detection Ternary operator
UEZ Posted May 17, 2013 Posted May 17, 2013 (edited) Is mikell's version not working for you? I got the same idea: #include <Array.au3> Global $aInput[6] = ['host|abc|downorflapping', _ 'port|xyz|unresponsive', _ 'host|abc|down', _ 'router|ccc|ccc', _ 'switch|ddd|ddd', _ 'TrunkCable|xyz|down'] $aResult = MakeUnique($aInput) _ArrayDisplay($aResult) Func MakeUnique($aInput) Local $aWork[UBound($aInput)][3], $i, $x, $aTmp For $i = 0 To UBound($aInput) - 1 ;convert it to a 2d array $aTmp = StringSplit($aInput[$i], "|", 2) For $x = 0 To 2 $aWork[$i][$x] = $aTmp[$x] Next Next _ArraySort($aWork, 0, 0, 0, 1) ;sort array at subitem 1 (hostnames) Local $iUB = UBound($aWork) - 1 For $i = $iUB To 1 Step - 1 ;delete duplicates If $aWork[$i][1] = $aWork[$i - 1][1] Then _ArrayDelete($aWork, $i) EndIf Next Return $aWork EndFunc Or a different approach: #include <Array.au3> Global $aInput[6] = ['host|abc|downorflapping', _ 'port|xyz|unresponsive', _ 'host|abc|down', _ 'router|ccc|ccc', _ 'switch|ddd|ddd', _ 'TrunkCable|xyz|down'] $aResult = MakeUnique($aInput) _ArrayDisplay($aResult) Func MakeUnique($aInput) Local $sInput = _ArrayToString($aInput, @CRLF) Local $aUnique = $aInput, $aTmp, $i, $j, $y For $i = 0 To UBound($aInput) - 1 $aTmp = StringRegExp($sInput, "(.*\|" & StringRegExpReplace($aInput[$i], ".*\|(.*)\|.*", "$1") & "\|.*)", 3) If (UBound($aTmp) - 1) > 0 Then For $j = 1 To UBound($aTmp) - 1 For $y = UBound($aUnique) - 1 To 0 Step - 1 If $aUnique[$y] = StringReplace(StringStripCR($aTmp[$j]), @LF, "") Then _ArrayDelete($aUnique, $y) Next Next EndIf Next Return $aUnique EndFunc Br, UEZ Edited May 17, 2013 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ
nitekram Posted May 17, 2013 Author Posted May 17, 2013 (edited) The version you posted (mike's) seems to work - this does not - posted. Have not had time to look at code...will have time tomorrow, the one you posted, gives me the opposite of what I am looking for, and since I have no idea about REGEX function, it would take me some time to change/fix #include <array.au3> Local $aMain[6] = ['host|abc|downorflapping', _ 'port|xyz|unresponsive', _ 'host|abc|down', _ 'router|ccc|ccc', _ 'switch|ddd|ddd', _ 'TrunkCable|xyz|down'] ; create and populate interim 2D array Local $aAlertInfo[6][3] For $1 = 0 To UBound($aMain) - 1 $a10 = StringSplit($aMain[$1], '|') $aAlertInfo[$1][0] = $a10[2] ; alert $aAlertInfo[$1][1] = $a10[3] ; event $aAlertInfo[$1][2] = $a10[1] ; class Next _ArrayDisplay($aAlertInfo, 'all') _ArraySort($aAlertInfo) _ArrayDisplay($aAlertInfo, 'sorted') For $i = Ubound($aMain)-1 to 1 step -1 $current = $aAlertInfo[$i][0] & $aAlertInfo[$i][2] $prev = $aAlertInfo[$i-1][0] & $aAlertInfo[$i-1][2] If $current = $prev Then _ArrayDelete($aAlertInfo, $i) Next _ArrayDisplay($aAlertInfo) Thanks for everyones help EDIT - I should have said, yours that you posted with the same idea, worked, and appears to be the best...I am looking on how to make sure that the more sever of the two alerts hits, as Down, is a lot more sever then downorflapping, but again will have to work on it tomorrow, thanks again Edited May 17, 2013 by nitekram 2¢ All by me:"Sometimes you have to go back to where you started, to get to where you want to go." "Everybody catches up with everyone, eventually" "As you teach others, you are really teaching yourself." From my dad "Do not worry about yesterday, as the only thing that you can control is tomorrow." WIKI | Tabs; | Arrays; | Strings | Wiki Arrays | How to ask a Question | Forum Search | FAQ | Tutorials | Original FAQ | ONLINE HELP | UDF's Wiki | AutoIt PDF AutoIt Snippets | Multple Guis | Interrupting a running function | Another Send StringRegExp | StringRegExp Help | RegEXTester | REG TUTOR | Reg TUTOT 2 AutoItSetOption | Macros | AutoIt Snippets | Wrapper | Autoit Docs SCITE | SciteJump | BB | MyTopics | Programming | UDFs | AutoIt 123 | UDFs Form | UDF Learning to script | Tutorials | Documentation | IE.AU3 | Games? | FreeSoftware | Path_Online | Core Language Programming Tips Excel Changes ControlHover.UDF GDI_Plus Draw_On_Screen GDI Basics GDI_More_Basics GDI Rotate GDI Graph GDI CheckExistingItems GDI Trajectory Replace $ghGDIPDll with $__g_hGDIPDll DLL 101? Array via Object GDI Swimlane GDI Plus French 101 Site GDI Examples UEZ GDI Basic Clock GDI Detection Ternary operator
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