ThomasQ Posted March 25, 2010 Share Posted March 25, 2010 Hi All! I've come to a stop on working on one of my scripts, due to a Infinite loop I can't figure out. To make it simpler I've made an example script, so I don't have to post the whole thing.. expandcollapse popup#Include <string.au3> #Include <Array.au3> #include <IE.au3> $oIE = _IE_Example ("form") $Bodytext = _IEBodyReadHTML ( $oIE ) $Bodytextproper = _StringProper ($Bodytext) $MainArray = _StringExplode ($Bodytextproper, "<Br>") $TempString = _ArrayToString($MainArray, @CRLF,0 ,0) $MainArray = _StringExplode ($TempString, "<Td>") $TempString = _ArrayToString($MainArray, @CRLF,0 ,0) $MainArray = _StringExplode ($TempString, "<Tr>") $TempString = _ArrayToString($MainArray, @CRLF,0 ,0) $MainArray = _StringExplode ($TempString, @CRLF) $TempString = _ArrayToString($MainArray, @CRLF,0 ,0) $MainArray = _StringExplode ($TempString, @CRLF) $size= Ubound($Mainarray) _ArrayDisplay ($MainArray) For $Step = 1 to $size ConsoleWrite($Step & @CRLF) $Todo = _ArrayToString($Mainarray, @CRLF, $Step, $Step) ConsoleWrite($Todo & @CRLF) $Check = StringLen($Todo) ConsoleWrite($Check & @CRLF) If $Check < 9 Then _ArrayDelete( $MainArray, $Step) $Step = -1 Endif $Step = +1 _ArrayDisplay ($MainArray) Next _ArrayDisplay ($MainArray) This code Should "clean up" this HTML source code, but instead, it get's stuck. It shows the Array the first time (before the loop), with a lot of Non entries (entries containing 8 or less characters). The point of the loop is to check each array entry if it's too short, after wich it deletes it from the array. The array decreases in size after deleting, so that's where the $Step = -1 comes in.. It work's fine until, the scripts checks the entrie ExampleForm, on position 2. For some reason it does show it's longer then <9, but it won't go to the next step.. So it doesn't delete the entry, it just subtracts 1 from the $Step.. Also, if I change the If $Check < 9 Then to $Check < 5, it has the same problem with the array entry <body>, wich is 7 characters long, and should be skipped as well.. Many thanks in advance! Thomas Link to comment Share on other sites More sharing options...
gcue Posted March 25, 2010 Share Posted March 25, 2010 msgbox $size to see how many steps.. might be several which might seem like its infinite Link to comment Share on other sites More sharing options...
ThomasQ Posted March 25, 2010 Author Share Posted March 25, 2010 Uhmm, it's 99.. But $size doesn't change -> The loop should check all 99 entries. The problem is that the $Step = -1 part seems to work sometimes, even when it shouldn't.. Link to comment Share on other sites More sharing options...
ThomasQ Posted March 25, 2010 Author Share Posted March 25, 2010 (edited) For some reason it just won't add the Step + 1, when it finds the Exampleform</Td> entry.. Edited March 25, 2010 by ThomasQ Link to comment Share on other sites More sharing options...
Moderators Melba23 Posted March 25, 2010 Moderators Share Posted March 25, 2010 ThomasQ,If you want to delete elements from an array while actually running through it, you MUST start at the bottom and work up - otherwise you get into all sorts of problems (as I know from bitter personal experience until someone showed me what to do!) This works nicely for me:#Include <string.au3> #Include <Array.au3> #include <IE.au3> $oIE = _IE_Example ("form") $Bodytext = _IEBodyReadHTML ( $oIE ) $Bodytextproper = _StringProper ($Bodytext) $MainArray = _StringExplode ($Bodytextproper, "<Br>") $TempString = _ArrayToString($MainArray, @CRLF,0 ,0) $MainArray = _StringExplode ($TempString, "<Td>") $TempString = _ArrayToString($MainArray, @CRLF,0 ,0) $MainArray = _StringExplode ($TempString, "<Tr>") $TempString = _ArrayToString($MainArray, @CRLF,0 ,0) $MainArray = _StringExplode ($TempString, @CRLF) $TempString = _ArrayToString($MainArray, @CRLF,0 ,0) $MainArray = _StringExplode ($TempString, @CRLF) $size= Ubound($Mainarray) _ArrayDisplay ($MainArray) For $i = $size - 1 To 0 Step -1 If StringLen($MainArray[$i]) < 9 Then _ArrayDelete($MainArray, $i) Next _ArrayDisplay ($MainArray)I hope it does for you too. 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 Link to comment Share on other sites More sharing options...
ThomasQ Posted March 28, 2010 Author Share Posted March 28, 2010 I tried it this a few days ago, and it works brilliantly! Thanks! Link to comment Share on other sites More sharing options...
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