Jump to content

_ArrayFindAll Not returning Only valid result


Recommended Posts

I have a table I am parsing, to find specific vehicle information. I am unable to get _ArrayFindAll to return the only valid result with my test data.

Below is a sample of the table's HTML:

<td class="textCenter">2010</td>
           <td>TOYOTA</td>
           <td>TACOMA 4X4 DB</td>
           <td></td>
           <td>BLACK</td>
           <td class="textCenter">C</td>
           <td class="textCenter">6</td>
           <td>GAS</td>
           <td class="textCenter">A</td>
           <td class="textCenter">4X4</td>
           <td class="textCenter">Y</td>
           <td>CD</td>
           <td class="textCenter">HT</td>
           <td class="textCenter">C</td>
           <td class="textRight" nowrap="nowrap">80,975</td>
           
           
           <td class="textRight" nowrap="nowrap">$16,800</td>
       </tr>
   
       <tr><!-- 308 -->
           <td class="textCenter">2010</td>
           <td>TOYOTA</td>
           <td>TACOMA 4X4 RG</td>
           <td></td>
           <td>BLACK</td>
           <td class="textCenter">R</td>
           <td class="textCenter">4</td>
           <td>GAS</td>
           <td class="textCenter">5</td>
           <td class="textCenter">4X4</td>
           <td class="textCenter">A</td>
           <td>CD</td>
           <td class="textCenter">HT</td>
           <td class="textCenter">C</td>
           <td class="textRight" nowrap="nowrap">95,224</td>
           
           
           <td class="textRight" nowrap="nowrap">$9,500</td>
       </tr>
   
       <tr><!-- 309 -->
           <td class="textCenter">2011</td>
           <td>BUICK</td>
           <td>REGAL</td>
           <td>CXL RL4</td>
           <td>BLACK</td>
           <td class="textCenter">4</td>
           <td class="textCenter">4</td>
           <td>GAS</td>
           <td class="textCenter">A</td>
           <td class="textCenter"></td>
           <td class="textCenter">A</td>
           <td>CD</td>
           <td class="textCenter">SR</td>
           <td class="textCenter">L</td>
           <td class="textRight" nowrap="nowrap">102,694</td>
           
           
           <td class="textRight" nowrap="nowrap">$5,000</td>
       </tr>
   
       <tr><!-- 310 -->
           <td class="textCenter">2011</td>
           <td>CHEVROLET</td>
           <td>AVALANCH 4X4 CR</td>
           <td>LS</td>
           <td>GRAY</td>
           <td class="textCenter">C</td>
           <td class="textCenter">8</td>
           <td>E</td>
           <td class="textCenter">A</td>
           <td class="textCenter">4X4</td>
           <td class="textCenter">A</td>
           <td>CD</td>
           <td class="textCenter">HT</td>
           <td class="textCenter">C</td>
           <td class="textRight" nowrap="nowrap">64,759</td>
           
           
           <td class="textRight" nowrap="nowrap">$16,300</td>
       </tr>
   
       <tr><!-- 311 -->
           <td class="textCenter">2011</td>
           <td>CHEVROLET</td>
           <td>EQUINOX AWD 4C</td>
           <td>LT W/2LT</td>
           <td>BLACK</td>
           <td class="textCenter">S</td>
           <td class="textCenter">4</td>
           <td>GAS</td>
           <td class="textCenter">A</td>
           <td class="textCenter">AWD</td>
           <td class="textCenter">Y</td>
           <td>CD</td>
           <td class="textCenter">SR</td>
           <td class="textCenter">C</td>
           <td class="textRight" nowrap="nowrap">91,896</td>
           
           
           <td class="textRight" nowrap="nowrap">$4,400</td>
       </tr>
   
       <tr><!-- 312 -->
           <td class="textCenter">2011</td>
           <td>CHEVROLET</td>
           <td>TAHOE 4X4 V8</td>
           <td>LTZ</td>
           <td>WHITE</td>
           <td class="textCenter">S</td>
           <td class="textCenter">8</td>
           <td>C</td>
           <td class="textCenter">A</td>
           <td class="textCenter">4X4</td>
           <td class="textCenter">A</td>
           <td>N</td>
           <td class="textCenter">MR</td>
           <td class="textCenter">L</td>
           <td class="textRight" nowrap="nowrap">126,982</td>
           
           
           <td class="textRight" nowrap="nowrap">$17,800</td>
       </tr>
   
       <tr><!-- 313 -->
           <td class="textCenter">2011</td>
           <td>CHEVROLET</td>
           <td>1500 SLV 4X4 EX</td>
           <td>LT</td>
           <td>GRAY</td>
           <td class="textCenter">X</td>
           <td class="textCenter">8</td>
           <td>GAS</td>
           <td class="textCenter">O</td>
           <td class="textCenter">4X4</td>
           <td class="textCenter">A</td>
           <td>CD</td>
           <td class="textCenter">HT</td>
           <td class="textCenter">C</td>
           <td class="textRight" nowrap="nowrap">60,303</td>
           
           
           <td class="textRight" nowrap="nowrap">$18,100</td>
       </tr>
   
       <tr><!-- 314 -->
           <td class="textCenter">2011</td>
           <td>CHEVROLET</td>
           <td>1500 SLV 4X4 EX</td>
           <td>LT</td>
           <td>SILVER</td>
           <td class="textCenter">X</td>
           <td class="textCenter">8</td>
           <td>E</td>
           <td class="textCenter">O</td>
           <td class="textCenter">4X4</td>
           <td class="textCenter">A</td>
           <td>CD</td>
           <td class="textCenter">HT</td>
           <td class="textCenter">C</td>
           <td class="textRight" nowrap="nowrap">89,403</td>
           
           
           <td class="textRight" nowrap="nowrap">$15,900</td>
       </tr>
   
       <tr><!-- 315 -->
           <td class="textCenter">2011</td>
           <td>CHEVROLET</td>
           <td>1500 SLV 4X4 EX</td>
           <td>LTZ</td>
           <td>BLUE</td>
           <td class="textCenter">X</td>
           <td class="textCenter">8</td>
           <td>E</td>
           <td class="textCenter">A</td>
           <td class="textCenter">4X4</td>
           <td class="textCenter">A</td>
           <td>CD</td>
           <td class="textCenter">HT</td>
           <td class="textCenter">L</td>
           <td class="textRight" nowrap="nowrap">53,087</td>
           
           
           <td class="textRight" nowrap="nowrap">$17,700</td>
       </tr>
   
       <tr><!-- 316 -->
           <td class="textCenter">2011</td>
           <td>CHEVROLET</td>
           <td>3500 CUTAWAY</td>
           <td>WORK VAN</td>
           <td>WHITE</td>
           <td class="textCenter">S</td>
           <td class="textCenter"></td>
           <td></td>
           <td class="textCenter">A</td>
           <td class="textCenter">4X2</td>
           <td class="textCenter"></td>
           <td>N</td>
           <td class="textCenter">HT</td>
           <td class="textCenter">C</td>
           <td class="textRight" nowrap="nowrap">202,477</td>
           
           
           <td class="textRight" nowrap="nowrap">$2,700</td>
       </tr>
   
       <tr><!-- 317 -->
           <td class="textCenter">2011</td>
           <td>CHRYSLER</td>
           <td>TOWN &amp; COUNTRY</td>
           <td>TOURING</td>
           <td>BLACK</td>
           <td class="textCenter">4</td>
           <td class="textCenter">6</td>
           <td>E</td>
           <td class="textCenter">A</td>
           <td class="textCenter">4X2</td>
           <td class="textCenter">A</td>
           <td>CD</td>
           <td class="textCenter">HT</td>
           <td class="textCenter"></td>
           <td class="textRight" nowrap="nowrap">198,541</td>
           
           
           <td class="textRight" nowrap="nowrap">$1,900</td>
       </tr>
   
       <tr><!-- 318 -->
           <td class="textCenter">2011</td>
           <td>DODGE</td>
           <td>DURANGO AWD V6</td>
           <td>CREW</td>
           <td>BLUE</td>
           <td class="textCenter">S</td>
           <td class="textCenter">6</td>
           <td>GAS</td>
           <td class="textCenter">A</td>
           <td class="textCenter">AWD</td>
           <td class="textCenter">A</td>
           <td>CD</td>
           <td class="textCenter">SR</td>
           <td class="textCenter">C</td>
           <td class="textRight" nowrap="nowrap">176,036</td>
           
           
           <td class="textRight" nowrap="nowrap">$2,800</td>
       </tr>
   
       <tr><!-- 319 -->
           <td class="textCenter">2011</td>
           <td>FORD</td>
           <td>FOCUS</td>
           <td>SE</td>
           <td>SILVER</td>
           <td class="textCenter">4</td>
           <td class="textCenter">4</td>
           <td>GAS</td>
           <td class="textCenter">A</td>
           <td class="textCenter"></td>
           <td class="textCenter">Y</td>
           <td>CD</td>
           <td class="textCenter">HT</td>
           <td class="textCenter">C</td>
           <td class="textRight" nowrap="nowrap">101,929</td>
           
           
           <td class="textRight" nowrap="nowrap">$3,100</td>
       </tr>
   
       <tr><!-- 320 -->
           <td class="textCenter">2011</td>
           <td>FORD</td>
           <td>FUSION FWD 4C</td>
           <td>SEL</td>
           <td>WHITE</td>
           <td class="textCenter">4</td>
           <td class="textCenter">4</td>
           <td>GAS</td>
           <td class="textCenter">A</td>
           <td class="textCenter"></td>
           <td class="textCenter">Y</td>
           <td>CD</td>
           <td class="textCenter">SR</td>
           <td class="textCenter">L</td>
           <td class="textRight" nowrap="nowrap">78,290</td>
           
           
           <td class="textRight" nowrap="nowrap">$5,500</td>
       </tr>
   
       <tr><!-- 321 -->
           <td class="textCenter">2011</td>
           <td>FORD</td>
           <td>F150 4X4 CR</td>
           <td>XLT</td>
           <td>BLACK</td>
           <td class="textCenter">C</td>
           <td class="textCenter">8</td>
           <td>GAS</td>
           <td class="textCenter">A</td>
           <td class="textCenter">4X4</td>
           <td class="textCenter">Y</td>
           <td>CD</td>
           <td class="textCenter">HT</td>
           <td class="textCenter">C</td>
           <td class="textRight" nowrap="nowrap">70,909</td>
           
           
           <td class="textRight" nowrap="nowrap">$16,000</td>
       </tr>
   
       <tr><!-- 322 -->
           <td class="textCenter">2011</td>
           <td>FORD</td>
           <td>MUSTANG V6 CPE</td>
           <td>V6 PREMIUM</td>
           <td>BLACK</td>
           <td class="textCenter">2</td>
           <td class="textCenter">6</td>
           <td>GAS</td>
           <td class="textCenter">A</td>
           <td class="textCenter">4X2</td>
           <td class="textCenter">A</td>
           <td>CD</td>
           <td class="textCenter">HT</td>
           <td class="textCenter">L</td>
           <td class="textRight" nowrap="nowrap">92,531</td>
           
           
           <td class="textRight" nowrap="nowrap">$2,700</td>
       </tr>
   
       <tr><!-- 323 -->
           <td class="textCenter">2011</td>
           <td>GMC</td>
           <td>ACADIA FWD</td>
           <td>SLE</td>
           <td>RED</td>
           <td class="textCenter">4</td>
           <td class="textCenter">6</td>
           <td>GAS</td>
           <td class="textCenter">A</td>
           <td class="textCenter"></td>
           <td class="textCenter">A</td>
           <td>CD</td>
           <td class="textCenter">HT</td>
           <td class="textCenter">C</td>
           <td class="textRight" nowrap="nowrap">79,199</td>
           
           
           <td class="textRight" nowrap="nowrap">$10,700</td>

A picture of the table test data is attached here:

TableSample.PNG

Here is the _query function, and all other relevant code that I can share.

 

Func _query($aSel, $aUrls)
    $oIE = _login()

    If $oIE = "Return" Then
        Return
    EndIf

    $j = 0
    While $j < UBound($aSel) - 1

        $i = 1

        $aucID ;Unable To Share What This Is Other Than Var Name.

        _IENavigate($oIE, "Something" & $aucID[0] & "Something")

        _IELoadWait($oIE, 100, 2000)
        $oObj = _IETableGetCollection($oIE, 3)
        $cars = _IETableWriteToArray_ProgressBar($oObj, True, "Processing Requested Information!") ;<---- Modified Version See Post For It: https://www.autoitscript.com/forum/topic/195335-solved-how-to-add-a-progress-bar-to-_ietablewritetoarray/?tab=comments#comment-1400699

        $carsYear = _filter($cars, 0, 0, GUICtrlRead($year))
        $carsMake = _filter($carsYear, 0, 1, GUICtrlRead($make))
        Global $carsModel = _filter($carsMake, 0, 2, GUICtrlRead($model))

        $i = 0
        $engine = GUICtrlRead($engine)

        If $engine <> "" Then

            While $i < StringLen($engine)

                $carsEngine = _filter($carsModel, 0, 6 + $i, StringLeft($engine, 1))

                ;_ArrayDisplay($carsModel, "Cars Model Before Array Delete")

                $x = 1
                While $x <= UBound($carsModel)

                    _ArrayDelete($carsModel, $x)
                    $x += 1

                WEnd

                ;_ArrayDisplay($carsModel, "Cars Model After Array Delete")

                ;_ArrayConcatenate($carsModel, $carsEngine)

                ;_ArrayDisplay($carsModel, "Cars Model After Concatenate")

                $engine = StringTrimLeft($engine, 1)
                $i += 1

            WEnd

        Else

            Dim $carsEngine[1][16]

        EndIf

        _ArrayConcatenate($carsEngine, $carsModel)
        _ArrayDisplay($carsEngine, "Cars Engine")

        Dim $carsDriveTrain[1][16]
        Dim $carsDriveTrain2[1][16]
        $driveTrainVal = GUICtrlRead($driveTrain)
        If $driveTrainVal = "4x4" Or $driveTrainVal = "awd" Then

            $carsDriveTrain = _filter($carsEngine, 0, 9, "4")
            $carsDriveTrain2 = _filter($carsEngine, 0, 9, "a")
;~          _ArrayDisplay($carsDriveTrain, "Drive Train Before")
;~          If @error Then
;~              MsgBox("", "", "Cars Drive Train Error: " & @error)
;~          EndIf
;~          _ArrayDisplay($carsDriveTrain2, "Drive Train2 Before")
;~          If @error Then
;~              MsgBox("", "", "Cars Drive Train 2 Error: " & @error)
;~          EndIf
            _ArrayConcatenate($carsDriveTrain, $carsDriveTrain2)

            _ArrayDisplay($carsDriveTrain, "Drive Train After Concat")

        ElseIf $driveTrainVal = "" Then

            _ArrayConcatenate($carsDriveTrain, $carsEngine)

        Else

            $carsDriveTrain = _filter($carsEngine, 0, 9, $driveTrain)
        EndIf


        Dim $carsOdom[1][16]
        $min = GUICtrlRead($odomMin)
        $max = GUICtrlRead($odomMax)
        For $i = 0 To UBound($carsDriveTrain) - 1

            If $carsDriveTrain[$i][14] > $min And $carsDriveTrain[$i][14] < $max Then

                _ArrayAdd($carsOdom, $carsDriveTrain[$i])
                MsgBox("", "", "ADDED!")

            EndIf

        Next

        _ArrayDisplay($carsOdom, "Cars Odom")

        $j += 1
    WEnd

    _IEQuit($oIE)
EndFunc   ;==>_query

Func _filter($tofilter, $xpos1, $ypos1, $str)


;~  If UBound($tofilter, 1) <= 1 Then

;~      $endx = 0

;~  Else

;~      $endx = UBound($tofilter, 1) - 1

;~  EndIf

;~  $cars = _ArrayFindAll($tofilter, $str, $tofilter[$xpos1][$ypos1], $tofilter[$endx][$ypos1], 0, 1, $ypos1, False)

    $cars = _ArrayFindAll($tofilter, $str, Default, Default, 0, 1, $ypos1)

    Dim $carsFiltered[1][16] = [["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p"]]
    ;_ArrayDisplay($carsFiltered)

    $i = 0

    $uBound = UBound($cars) - 1

    While $i < $uBound

        $filtered = _ArrayExtract($tofilter, $cars[$i], $cars[$i], 0, 15)
        ;_ArrayDisplay($filtered, "_filter Array of Filtered")
        _ArrayConcatenate($carsFiltered, $filtered)

        $i += 1

    WEnd

    _ArrayDelete($carsFiltered, 0)

    Return $carsFiltered

EndFunc   ;==>_filter

 

If you know of a more efficient way of doing this please let me know would be more than happy to chew down my inefficiency while learning! (It's like my grandpa used to say, "The only criticism I can't use is that which is not given to me.")

 

The Item an I am using to test the filter is:

image.png.e5de862ecef512c1bdc241dfd794b294.png

 

Edited by rm4453
Forgot To Include Result Used For Filter
Link to post
Share on other sites

Please attach resulting array from

$cars = _IETableWriteToArray_ProgressBar($oObj, True, "Processing Requested Information!") ;

as a txt file and specify which value is var:

$engine = GUICtrlRead($engine)

so i and maybe someother's too can have a short look for a quick solution. But as i see are you deleting from begin to end in the  array. This is no good idea, try to do this from end to begin and it should be the solution.

Link to post
Share on other sites

@AutoBert Sorry forgot to include the data, try cache refreshing (CTRL+SHIFT+R), as it should load the if not most data requested. (The table as you see it is the resulting array, aka the HTML attached is the table before it is ran through that)

Edited by rm4453
Link to post
Share on other sites
18 minutes ago, rm4453 said:

$engine = GUICtrlRead($engine)

This line is rewriting the contents of your $engine variable. Previously, by my guess, the variable held the Control ID of the input box, now it contains the contents of that box, and you have no way to get the contents of it again because you cleared the reference to it.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to post
Share on other sites
1 minute ago, BrewManNH said:

This line is rewriting the contents of your $engine variable. Previously, by my guess, the variable held the Control ID of the input box, now it contains the contents of that box, and you have no way to get the contents of it again because you cleared the reference to it.

I don't believe so... I am able to get as far as:

_ArrayConcatenate($carsEngine, $carsModel)
        _ArrayDisplay($carsEngine, "Cars Engine") ;<---- This contains the Chevy.

        Dim $carsDriveTrain[1][16]
        Dim $carsDriveTrain2[1][16]
        $driveTrainVal = GUICtrlRead($driveTrain)
        If $driveTrainVal = "4x4" Or $driveTrainVal = "awd" Then

            $carsDriveTrain = _filter($carsEngine, 0, 9, "4") ;<---- Returns No Result.
            $carsDriveTrain2 = _filter($carsEngine, 0, 9, "a") ;<--- Returns No Result.
;~          _ArrayDisplay($carsDriveTrain, "Drive Train Before") ;<- Which means This Contains Nothing.
;~          If @error Then
;~              MsgBox("", "", "Cars Drive Train Error: " & @error)
;~          EndIf
;~          _ArrayDisplay($carsDriveTrain2, "Drive Train2 Before");< And This Contains Nothing as Well.
;~          If @error Then
;~              MsgBox("", "", "Cars Drive Train 2 Error: " & @error)
;~          EndIf
            _ArrayConcatenate($carsDriveTrain, $carsDriveTrain2)

            _ArrayDisplay($carsDriveTrain, "Drive Train After Concat")

        ElseIf $driveTrainVal = "" Then

            _ArrayConcatenate($carsDriveTrain, $carsEngine)

        Else

            $carsDriveTrain = _filter($carsEngine, 0, 9, $driveTrain)
        EndIf


        Dim $carsOdom[1][16]
        $min = GUICtrlRead($odomMin)
        $max = GUICtrlRead($odomMax)
        For $i = 0 To UBound($carsDriveTrain) - 1

            If $carsDriveTrain[$i][14] > $min And $carsDriveTrain[$i][14] < $max Then

                _ArrayAdd($carsOdom, $carsDriveTrain[$i])
                MsgBox("", "", "ADDED!")

            EndIf

        Next

        _ArrayDisplay($carsOdom, "Cars Odom")

 

Link to post
Share on other sites
3 minutes ago, rm4453 said:

I don't believe so

Your belief and reality are two different things. You are indeed rewriting the value that the variable $engine contains.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to post
Share on other sites
10 minutes ago, BrewManNH said:

Your belief and reality are two different things. You are indeed rewriting the value that the variable $engine contains.

If you believe this is the case will you please point out or highlight which portion of the script after where I commented this contains the chevy, relies on $engine? If you are correct this would be an extremely easy fix, and I would love to have it boil down to something this simple.

 

*In case this helps I can confirm for you other than the GUI initialization this is the only time it is used up to that point:

$carsYear = _filter($cars, 0, 0, GUICtrlRead($year))
        $carsMake = _filter($carsYear, 0, 1, GUICtrlRead($make))
        Global $carsModel = _filter($carsMake, 0, 2, GUICtrlRead($model))

        $i = 0
        $engine = GUICtrlRead($engine);<--- Here

        If $engine <> "" Then

 

Edited by rm4453
Link to post
Share on other sites
  • Moderators

rm4453,

BrewManNH is absolutely correct. The first time through the loop you trash the $engine ControlID - which means every subsequent pass will not get the correct data into the variable as it will not read the value entered in the control. As a general principle the variables for the ControlID and the data within the control should always have distinct names.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png 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 columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to post
Share on other sites
Just now, Melba23 said:

rm4453,

BrewManNH is absolutely correct. The first time through the loop you trash the $engine ControlID - which means every subsequent pass will not get the correct data into the variable as it will not read the value entered in the control. As a general principle the variables for the ControlID and the data within the control should always have distinct names.

M23

I see the issue he commented about, I fixed that issue, and am still receiving the same result. I do appreciate him pointing that out.

Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By EmilyLove
      I have a string containing the full path of an executable and an array of executables without their paths. I am trying to compare the string to the list in the array and if a match is found, remove it from the array. The entry get removed from the array successfully, and after checking its return result, uses it to update the ubound if it succeeded, but it doesn't want to update to the new value. Any ideas what I am doing wrong? It acts like it is read-only.
      #include <Array.au3> #include <File.au3> Local $sApp_Exe = "F:\App\Nextcloud\nextcloud.exe" Local $aWaitForEXEX = [3, "Nextcloud.exe", "nextcloudcmd.exe", "QtWebEngineProcess.exe"] For $h = 1 To $aWaitForEXEX[0] If StringInStr($sApp_Exe, $aWaitForEXEX[$h]) <> 0 Then $iRet = _ArrayDelete($aWaitForEXEX, $h) If $iRet <> -1 Then $aWaitForEXEX[0] = $iRet ;this line doesn't work. $aWaitForEXEX[0] doesn't update and shortly gives Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded.: _ArrayDisplay($aWaitForEXEX) EndIf Next  
    • By vinnyMS
      #Include <Array.au3> #include <Constants.au3> $s = FileRead("2.txt") Local $w = StringRegExp($s, '(?is)(\b\w+\b)(?!.*\b\1\b)', 3) _ArrayColInsert($w, 1) For $i = 0 to UBound($w)-1 StringRegExpReplace($s, '(?i)\b' & $w[$i][0] & '\b', $w[$i][0]) $w[$i][1] = @extended Next _ArraySort($w, 1, 0, 0, 1) _ArrayDisplay($w) i have this script that returns 3 columns  
       
      i need to copy the  Col 0 and Col 1 as text to paste on notepad or excel
      you will have to create a "copy" button if possible
      array.au3 2.txt
    • By DannyJ
      I have a dataset like this, (a strubg)
      Username: User1 Type: Admin RegDate: 1999 Username: User2 Type: User RegDate: 2000 How to make a 2 dimensional array that I can display with _ArrayDisplay?
      This would be a perfect 2D array to represent my data:
      Username           Tpye RegDate User1              Admin 1999 User2              User 2000   If you run this Powershell this powershell command, you can get this dataset that I am talking about:
      Get-LocalUser | Select * With this code you can try it to read into a string:
      #include <GuiConstantsEx.au3> #include <WindowsConstants.au3> #include "GUIListViewEx.au3" #include <Array.au3> ; Just for display in example #RequireAdmin #Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_UseX64=y #EndRegion $sCommand = "powershell.exe Get-LocalUser | Select *" Local $iPid = Run($sCommand, @WorkingDir , @SW_SHOW , $STDOUT_CHILD) ProcessWaitClose($iPid) Local $sOutput = StdoutRead($iPID) ConsoleWrite($sOutput) How can I correctly split $sOutput into a 2D array (with the above mentioned layout) that I can display and I work with?
    • By kovlad
      My solution is to write nested arrays without copying.
      The problem was described hier.
       
      Function:
      #include <Array.au3> ; #FUNCTION# ==================================================================================================================== ; Name ..........: _ArrayNestedSet ; Description ...: Assigns a value to an element of a nested 1D array. ; Syntax ........: _ArrayNestedSet(ByRef $aArray, $vIndex, $vValue) ; Parameters ....: $aArray - an array of arrays. ; $vIndex - an index or 1d-array of indexes; ; a size if $vValue not defined (zero to delete). ; $vValue - a value (create, resize or delete if not defined). ; ; Return values .: on success - 1 ; @extended - nesting level of operation ; on failure - 0 ; @extended - nesting level of error ; @error = 1 - invalid array ; @error = 2 - invalid index ; Author ........: ; Modified ......: kovlad ; Remarks .......: ; Related .......: ; Link ..........: https://www.autoitscript.com/forum/topic/185638-assign-a-value-to-an-array-in-array-element/ ; https://www.autoitscript.com/trac/autoit/ticket/3515?replyto=description ; Example .......: Yes ; =============================================================================================================================== Func _ArrayNestedSet(ByRef $aArray, $vIndex, $vValue = Default) Local $extended = @extended + 1 If IsArray($vIndex) Then If UBound($vIndex, 0) <> 1 Then _ Return SetError(2, $extended) If UBound($vIndex) > 1 Then If UBound($aArray, 0) <> 1 Then _ Return SetError(1, $extended) ; keep index for this array Local $i = $vIndex[0] If $i < 0 Or UBound($aArray) <= $i Then _ Return SetError(2, $extended) ; delete index of this array _ArrayDelete($vIndex, 0) ; recursive function call Local $return = _ArrayNestedSet($aArray[$i], $vIndex, $vValue) If @error Then Return SetError(@error, @extended + 1, 0) Else Return SetExtended(@extended + 1, 1) EndIf Else $vIndex = $vIndex[0] EndIf EndIf If $vValue = Default Then If $vIndex < 0 Then _ Return SetError(2, $extended) If $vIndex = 0 Then ; delete array and free memory $aArray = 0 Return SetExtended($extended, 1) EndIf If UBound($aArray, 0) = 1 Then ; resize array keeping data ReDim $aArray[$vIndex] Return SetExtended($extended, 1) Else ; create new nested array Local $aTmp[$vIndex] $aArray = $aTmp Return SetExtended($extended, 1) EndIf Else If UBound($aArray) <= $vIndex Then _ Return SetError(2, $extended + 1) ; set value of array entry $aArray[$vIndex] = $vValue Return SetExtended($extended, 1) EndIf EndFunc  
      Examples:
      ; write value to 1st nested array ConsoleWrite("@@ Debug(" & @ScriptLineNumber & ") : write value to 1st nested array" & @CRLF) Local $aTmp1[4] = [1,2,3,4] _ArrayDisplay($aTmp1, "$aTmp1") Local $aArray[2] = [$aTmp1] ConsoleWrite( _ "_ArrayNestedSet($aArray[0], 3, 14) = " & _ArrayNestedSet($aArray[0], 3, 14) & @CRLF & _ " @error = " & @error & @CRLF & _ " @extended = " & @extended & @CRLF & @CRLF) _ArrayDisplay($aArray[0], "$aArray[0]") ; resize 1st nested array ConsoleWrite("@@ Debug(" & @ScriptLineNumber & ") : resize 1st nested array" & @CRLF) ConsoleWrite( _ "_ArrayNestedSet($aArray[0], 8) = " & _ArrayNestedSet($aArray[0], 8) & @CRLF & _ " @error = " & @error & @CRLF & _ " @extended = " & @extended & @CRLF & @CRLF) _ArrayDisplay($aArray[0], "$aArray[0]") ; write array to 1st nested array ConsoleWrite("@@ Debug(" & @ScriptLineNumber & ") : write array to 1st nested array" & @CRLF) Local $aTmp11[4] = [11,12,13,14] _ArrayDisplay($aTmp11, "$aTmp11") ConsoleWrite( _ "_ArrayNestedSet($aArray[0], 2, $aTmp11) = " & _ArrayNestedSet($aArray[0], 2, $aTmp11) & @CRLF & _ " @error = " & @error & @CRLF & _ " @extended = " & @extended & @CRLF & @CRLF) _ArrayDisplay(($aArray[0])[2], "($aArray[0])[2]") ; write value to 2nd nested array using index array ConsoleWrite("@@ Debug(" & @ScriptLineNumber & ") : write value to 2nd nested array using index array" & @CRLF) Local $aIndex1[2] = [2,3] _ArrayDisplay($aIndex1, "$aIndex1") ConsoleWrite( _ "_ArrayNestedSet($aArray[0], $aIndex1, 140) = " & _ArrayNestedSet($aArray[0], $aIndex1, 140) & @CRLF & _ " @error = " & @error & @CRLF & _ " @extended = " & @extended & @CRLF & @CRLF) _ArrayDisplay(($aArray[0])[2], "($aArray[0])[2]") ; resize 2nd nested array ConsoleWrite("@@ Debug(" & @ScriptLineNumber & ") : resize 2nd nested array" & @CRLF) Local $aIndex1[2] = [2,8] _ArrayDisplay($aIndex1, "$aIndex1") ConsoleWrite( _ "_ArrayNestedSet($aArray[0], $aIndex1) = " & _ArrayNestedSet($aArray[0], $aIndex1) & @CRLF & _ " @error = " & @error & @CRLF & _ " @extended = " & @extended & @CRLF & @CRLF) _ArrayDisplay(($aArray[0])[2], "($aArray[0])[2]") ; create new 3rd nested array ConsoleWrite("@@ Debug(" & @ScriptLineNumber & ") : create new 3rd nested array" & @CRLF) Local $aIndex2[3] = [2,7,6] _ArrayDisplay($aIndex2, "$aIndex2") ConsoleWrite( _ "_ArrayNestedSet($aArray[0], $aIndex2) = " & _ArrayNestedSet($aArray[0], $aIndex2) & @CRLF & _ " @error = " & @error & @CRLF & _ " @extended = " & @extended & @CRLF & @CRLF) _ArrayDisplay((($aArray[0])[2])[7], ")($aArray[0])[2])[7]") ; delete 3rd nested array ConsoleWrite("@@ Debug(" & @ScriptLineNumber & ") : delete 3rd nested array" & @CRLF) Local $aIndex3[3] = [2,7,0] _ArrayDisplay($aIndex3, "$aIndex2") ConsoleWrite( _ "_ArrayNestedSet($aArray[0], $aIndex3) = " & _ArrayNestedSet($aArray[0], $aIndex3) & @CRLF & _ " @error = " & @error & @CRLF & _ " @extended = " & @extended & @CRLF) ConsoleWrite("IsArray((($aArray[0])[2])[7]) = " & IsArray((($aArray[0])[2])[7]) & @CRLF & @CRLF) ; write 0 in 1st nested array to delete the 2nd nested array ConsoleWrite("@@ Debug(" & @ScriptLineNumber & ") : write 0 in 1st nested array to delete the 2nd nested array" & @CRLF) Local $aIndex4[1] = [2] _ArrayDisplay($aIndex4, "$aIndex4") ConsoleWrite( _ "_ArrayNestedSet($aArray[0], $aIndex4, 0) = " & _ArrayNestedSet($aArray[0], $aIndex4, 0) & @CRLF & _ " @error = " & @error & @CRLF & _ " @extended = " & @extended & @CRLF) ConsoleWrite("IsArray(($aArray[0])[2]) = " & IsArray(($aArray[0])[2]) & @CRLF & @CRLF) ; delete 1st nested array (same as '$aArray[0] = 0') ConsoleWrite("@@ Debug(" & @ScriptLineNumber & ") : delete 1st nested array (same as '$aArray[0] = 0')" & @CRLF) Local $aIndex5[1] = [0] _ArrayDisplay($aIndex5, "$aIndex5") ConsoleWrite( _ "_ArrayNestedSet($aArray[0], $aIndex5) = " & _ArrayNestedSet($aArray[0], $aIndex5) & @CRLF & _ " @error = " & @error & @CRLF & _ " @extended = " & @extended & @CRLF) ConsoleWrite("IsArray($aArray[0]) = " & IsArray($aArray[0]) & @CRLF & @CRLF)  
    • By DannyJ
      $sCommands1 = 'powershell.exe Get-ChildItem' $iPid = run($sCommands1   , @WorkingDir , @SW_SHOW , 0x2) $sOutput = ""  While 1     $sOutput &= StdoutRead($iPID)         If @error Then             ExitLoop         EndIf  WEnd ;~ msgbox(0, '' , $sOutput) ConsoleWrite("$sOutput") ConsoleWrite($sOutput) ConsoleWrite(@CRLF) $aOutput = stringsplit($sOutput ,@LF , 2) For $i=0 To  UBound($aOutput) - 1 Step 1     ConsoleWrite($aOutput[$i]) Next The script above reads the whole directory into a one dimensional array, but I need to work with the array, so I need to split the array into multiple dimensions.
      I have already read some forum answers here, and I have already tried these commands:
       
      Are there any way to use the $aOutput variable like in PowerShell:
      PowerShell:
      $a = Get-ChildItem $a.Mode I imagine this in AutoIt  $aOutput
      ConsoleWrite($aOutput[i].Mode) Or if I split this command into 2 dimension like:
      For $i To UBound($aOutput)-1 Step 1 ConsoleWrite($aOutput[$i][1]) ConsoleWrite($aOutput[$i][2]) Next  
×
×
  • Create New...