Quantcast
Channel: AutoIt v3 - General Help and Support
Viewing all articles
Browse latest Browse all 12506

Confusing array filter

$
0
0
To tell you the truth, math is nowhere near my strong side, I'm having a lot of trouble getting this into my head, I don't know why it's not working and how to fix it...

I've added a few comments that will hopefully show what it's I'm trying to do in here :/

[ autoit ]         
#include <Array.au3> #region - test 1 - Local $New_Data_to_Add[1] = ['[["123",5]]']; data that will be added or should stay if already on listview Local $Currently_In_List[3] = ["123", "456","789"];data that was in list view prior to this call Filter($New_Data_to_Add, $Currently_In_List) _ArrayDisplay($New_Data_to_Add, "$New_Data_to_Add"); data that will be newly added to listview _ArrayDisplay($Currently_In_List, "$Currently_In_List"); data that should remain in list view #cs     in this example,$New_Data_to_Add is handled correctly and returns zero in place of 123 which was already in current list     problem is that $Currently_In_List should only return 123 and not 456 and 789 #ce #endregion - test 1 - Exit #region - test 2 - Local $New_Data_to_Add[1] = ['[["123",2],["456",8],["789",1]]']; data that will be added or should stay if already on listview Local $Currently_In_List[3] = ["123", "456"];data that was in list view prior to this call Filter($New_Data_to_Add, $Currently_In_List) _ArrayDisplay($New_Data_to_Add, "$New_Data_to_Add"); data that will be newly added to listview _ArrayDisplay($Currently_In_List, "$Currently_In_List"); data that should remain in list view #cs     in this example,$New_Data_to_Add is handled correctly, only 789 remains positive and will be added to list     problem is that $Currently_In_List is not returning 123 and 456 which should remain in the array..., or should not be touched aka deleted from list #ce #endregion - test 2 - Func Filter(ByRef $New_Data_to_Add, ByRef $Currently_In_List)     $Result = StringRegExp($New_Data_to_Add[0], '\["([^"\]]\d*)",([^\]]\d*)', 3)     If @error Then         Return SetError(1, 0, 0)     EndIf     Local $Count = 0     Local $New[999][2]     For $I = 1 To UBound($Result) - 1 Step 2         $New[$Count][0] = $Result[$I-1]         $New[$Count][1] = $Result[$I]         $Count += 1     Next     If $Count Then ReDim $New[$Count][2]     Local $ID, $Delete     For $O = 0 To 10         If Not IsArray($New) Then Return         $Count = UBound($Currently_In_List)-1;_GUICtrlListView_GetItemCount($blah)         For $I = 0 To $Count             $ID = $Currently_In_List[$I];_GUICtrlListView_GetItemText($blah, $I, 0)             For $X = 0 To UBound($New)-1                 If $New[$X][0] Then                     $Delete = 1                     If $ID == $New[$X][0] Then                         $Delete = 0; mark                         $New[$X][0] = 0                         ;_GUICtrlListView_SetItemText($blah, $I, $New[$X][1], 1); update info, usually works                         ExitLoop                     EndIf                 Else                     $Delete = 0                 EndIf             Next             If $Delete Then                 ;_GUICtrlListView_DeleteItem($blah, $I); this is supposed to delete anything that's not in the $New_Data_to_Add array                 _ArrayDelete($Currently_In_List, $I)                 ExitLoop             EndIf         Next     Next     $New_Data_to_Add = $New     Return EndFunc

Viewing all articles
Browse latest Browse all 12506

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>