Jump to content
oemript

Why array variable do not work with _IEQuit?

Recommended Posts

oemript
Posted (edited)

Referring to following coding, I would like to know on why array variable do not work with _IEQuit.

#include <IE.au3>
Local $Item_No_max = 2
Local $aOIE[$Item_No_max + 1]; Create
For $Item_No = 1 to $Item_No_max
   Local $aOIE[$Item_No] = _IECreate("http://www.google.com")
   Sleep(5000)
   _IEQuit($aOIE[$Item_No])
Next

OIE.png

Does anyone have any suggestions?
Thanks in advance for any suggestions

 

 

Edited by oemript

Share this post


Link to post
Share on other sites
Danp2

Remove "Local" from this line --

Local $aOIE[$Item_No] = _IECreate("http://www.google.com")

You already declared the variable above, so no reason to declare it again. Once that change was made, the code ran as expected for me.

What version of Autoit are you running?

Share this post


Link to post
Share on other sites
oemript

I would like to know on what difference is on following 2 cases, both works well without any problem


Case 1

Local $oIE1 = _IECreate("http://www.google.com")
Sleep(5000)
_IEQuit($OIE1)

Case 2

$oIE2 = _IECreate("http://www.google.com")
Sleep(5000)
_IEQuit($OIE2)

Do you have any suggestions?
Thank you very much for any suggestions (^v^)

Share this post


Link to post
Share on other sites
boomingranny

First example: local creates the variable called $oIE1, then the bit after the = assigns its value

The second example does the same thing, (but called $oIE2) if the variable isn't already created then AutoIT automatically creates it.
AutoIT sees the code $oIE2, and sees there isn't a variable with that name yet, so it goes ahead and makes a new variable called $oIE2

dim global and local all create variables or arrays of variables.
This page explains it in further detail: https://www.autoitscript.com/autoit3/docs/keywords/Dim.htm

The problem with your first post's code is that you already made the array $aOIE
you then tried to declare an array called $aOIE with the size of [$Item_No

If you want to recreate/resize your array (which I don't think is what you were trying to do)
you can use redim (https://www.autoitscript.com/autoit3/docs/keywords/ReDim.htm)

To help understand this concept better,
If you use

Opt("MustDeclareVars",1)

at the start of your script, you will be forced to declare every variable you use (similar to some other programming languages)
you will then better appreciate the use of dim/global/local.

  • Thanks 1

Share this post


Link to post
Share on other sites
Subz

Its best practice not to use Dim when declaring variables, but use Local or Global.  Below is a basic explanation of how variables are viewed with AutoIt.

;~ This following three variables are all within the Global scope range aka able to be seen by all functions
Global $sVariable = "String"
$hVariable = WinGetHandle("title", "text")
;~ Declaring Local Variable in Global scope would also be treated like a Global variable
Local $iVariable = 1

Func _Example()
    ;~ The following example is within the Local scope range aka only able to be seen by the "Example" function
    Local $aVariable[1] = ["Array"]
    $bVariable = True
    ;~ NOTE: It is best practice not declare Global variables within functions
EndFunc

 

  • Thanks 1

Share this post


Link to post
Share on other sites
oemript

Thanks, to everyone very much for suggestions (^v^)

Share this post


Link to post
Share on other sites
mLipok
Posted (edited)

@oemript using your opening example I get from Au3Check this following errors:

Quote

>"Z:\AutoItPortable\App\SciTE\..\AutoIt3.exe" "Z:\AutoItPortable\App\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "Z:\AutoItPortable\__COMUNITY\HELP\193473-why-array-variable-do-not-work-with-_iequit.au3" /UserParams    
+>10:58:21 Starting AutoIt3Wrapper v.17.224.935.11 SciTE v.4.0.2.0   Keyboard:00000415  OS:WIN_10/  CPU:X64 OS:X64  Environment(Language:0415)  CodePage:65001  utf8.auto.check:4
+>         SciTEDir => Z:\AutoItPortable\App\SciTE   UserDir => Z:\AutoItPortable\App\SciTE\AutoIt3Wrapper
>Running AU3Check (3.3.15.1)  from:Z:\AutoItPortable\App  input:Z:\AutoItPortable\__COMUNITY\HELP\193473-why-array-variable-do-not-work-with-_iequit.au3
"Z:\AutoItPortable\__COMUNITY\HELP\193473-why-array-variable-do-not-work-with-_iequit.au3"(5,28) : error: syntax error
   Local $aOIE[$Item_No] = _IECreate

~~~~~~~~~~~~~~~~~~~~~~~~~~~^
"Z:\AutoItPortable\__COMUNITY\HELP\193473-why-array-variable-do-not-work-with-_iequit.au3"(5,28) : error: Statement cannot be just an expression.
   Local $aOIE[$Item_No] = _IECreate

~~~~~~~~~~~~~~~~~~~~~~~~~~~^
Z:\AutoItPortable\__COMUNITY\HELP\193473-why-array-variable-do-not-work-with-_iequit.au3 - 2 error(s), 0 warning(s)
!>10:58:21 AU3Check ended. Press F4 to jump to next error.rc:2
+>10:58:21 AutoIt3Wrapper Finished.
>Exit code: 2    Time: 1.194
 

When I run it without AutoItWrapper then I get:

Quote

Line 7  (File "Z:\AutoItPortable\__COMUNITY\HELP\193473-why-array-variable-do-not-work-with-_iequit.au3"):

_IEQuit($aOIE[$Item_No])
_IEQuit(^ ERROR

Error: Expected a variable in user function call.
 

As few members said, you should not decalare variables inside loop.
But the main problem in this case is that you do not understand the difference between declaring and assigning variables.

This is declaration of variable

Local $aOIE[$Item_No]

This is declaration with assigment - wrong assigment (syntax error)

Local $aOIE[$Item_No] = _IECreate("http://www.google.com")

Here is first example with declaration and proper assigment:

Local $aOIE[$Item_No] = [Null, Null]

Here is second example with declaration and proper assigment:

Local $iArraySize = 3
Local $aSomeArray[$iArraySize] = [0, 1, 2]

Here is third example with declaration and "almost proper" assigment:

Local $aOIE[$Item_No] = [_IECreate("http://www.google.com"), _IECreate("http://www.autoitscript.com")]

 

Your example should work and look like this:

#include <IE.au3>
_Example()

Func _Example()
    Local $Item_No_max = 2
    Local $aOIE[$Item_No_max + 1] ; Create
    For $Item_No = 1 To $Item_No_max
;~      Local $aOIE[$Item_No] = _IECreate("http://www.google.com")
        $aOIE[$Item_No] = _IECreate("http://www.google.com")
        Sleep(5000)
    Next

    For $Item_No = 1 To $Item_No_max
        _IEQuit($aOIE[$Item_No])
    Next
EndFunc   ;==>_Example

 

Edited by mLipok

Signature beginning:   Wondering who uses AutoIT and what it can be used for ?
* GHAPI UDF - modest begining - comunication with GitHub REST API Forum Rules *
ADO.au3 UDF     POP3.au3 UDF     XML.au3 UDF    How to use IE.au3  UDF with  AutoIt v3.3.14.x  for other useful stuff click the following button

Spoiler

Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind. 

My contribution (my own projects): * Debenu Quick PDF Library - UDF * Debenu PDF Viewer SDK - UDF * Acrobat Reader - ActiveX Viewer * UDF for PDFCreator v1.x.x * XZip - UDF * AppCompatFlags UDF * CrowdinAPI UDF * _WinMergeCompare2Files() * _JavaExceptionAdd() * _IsBeta() * Writing DPI Awareness App - workaround * _AutoIt_RequiredVersion() * Chilkatsoft.au3 UDF * TeamViewer.au3 UDF * JavaManagement UDF * VIES over SOAP * WinSCP UDF * GHAPI UDF - modest begining - comunication with GitHub REST APIErrorLog.au3 UDF - A logging Library
 

My contribution to others projects or UDF based on  others projects: * _sql.au3 UDF  * POP3.au3 UDF *  RTF Printer - UDF * XML.au3 UDF * ADO.au3 UDF SMTP Mailer UDF * Dual Monitor resolution detection * * 2GUI on Dual Monitor System * _SciLexer.au3 UDF *

Useful links: * Forum Rules * Forum etiquette *  Forum Information and FAQs * How to post code on the forum * AutoIt Online Documentation * AutoIt Online Beta Documentation * SciTE4AutoIt3 getting started * Convert text blocks to AutoIt code * Games made in Autoit * Programming related sites * Polish AutoIt Tutorial * DllCall Code Generator * 

Wiki: Expand your knowledge - AutoIt Wiki * Collection of User Defined Functions * How to use HelpFile * Good coding practices in AutoIt * 

IE Related:  * How to use IE.au3  UDF with  AutoIt v3.3.14.x * Why isn't Autoit able to click a Javascript Dialog? * Clicking javascript button with no ID * IE document >> save as MHT file * IETab Switcher (by LarsJ ) * HTML Entities * _IEquerySelectorAll() (by uncommon) * IE in TaskScheduler

I encourage you to read: * Global Vars * Best Coding Practices * Please explain code used in Help file for several File functions * OOP-like approach in AutoIt * UDF-Spec Questions *  EXAMPLE: How To Catch ConsoleWrite() output to a file or to CMD *

"Homo sum; humani nil a me alienum puto" - Publius Terentius Afer
"Program are meant to be read by humans and only incidentally for computers and execute" - Donald Knuth, "The Art of Computer Programming"
:naughty:  :ranting:, be  :) and       \\//_.

Anticipating Errors :  "Any program that accepts data from a user must include code to validate that data before sending it to the data store. You cannot rely on the data store, ...., or even your programming language to notify you of problems. You must check every byte entered by your users, making sure that data is the correct type for its field and that required fields are not empty."

Signature last update: 2018-10-31

Share this post


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

×