# _FileListToArray, then error

## Recommended Posts

Hi everyone,

I've got a bit of code that gets the file name of a zip file in a particular directory and tried to unzip it.  _FileListToArray should create an array and define $aArray[1] as the first file returned by the search. But when I try to use$aArray[1] for anything, I get the error: "==> Array variable has incorrect number of subscripts or subscript dimension range exceeded."

Any thoughts?

If $osbit = "32" Then Local$aFileList = _FileListToArray($extract_dir, "*win32*") _ExtractZip($extract_dir & $aArray[1],$extract_dir)
ElseIf $osbit = "64" Then Local$aFileList = _FileListToArray($extract_dir, "*amd*") _ExtractZip($extract_dir & $aArray[1],$extract_dir)
EndIf

Thanks.

How about doing an _ArrayDisplay to see what value sits at $aArray[1]? Or posting your entire code, along with the _ExtractZIp function, so we can test? "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball #### Share this post ##### Link to post ##### Share on other sites _ArrayDisplay does seem to work fine. Here's the entire script (obviously file paths will mean nothing): #include <GuiEdit.au3> #include <GuiListBox.au3> #include <GuiComboBox.au3> #include <GuiListView.au3> #include <GUIConstantsEx.au3> #include <MsgBoxConstants.au3> #include <File.au3> #include <FileConstants.au3> #include <Array.au3> AutoItSetOption ( "SendKeyDelay" , 30 ) AutoItSetOption ( "TrayIconDebug", 1 ) Opt("WinTitleMatchMode", 2) ; GET BITNESS OF OS (CRUDE METHOD) If FileExists("C:\Program Files (x86)") Then Local$osbit = "64"
Else
Local $osbit = "32" EndIf Local$aArray[0], $aArray[1] Sleep(1000) ; COPY PATCH ZIP FILE FileCopy("\\chi413071\Ship\HSF11.1.2.4\11_1_2_4_000_3031\BuildPatch.zip", "C:\Oracle\Middleware\EPMSystem11R1\opatch\",$FC_OVERWRITE)

MsgBox(0, "", "")
Sleep(1000)
Local $opatch_dir = "C:\Oracle\Middleware\EPMSystem11R1\opatch\" Local$extract_dir = "C:\Oracle\Middleware\EPMSystem11R1\opatch\Extracted"
DirCreate($extract_dir) ; to extract to _ExtractZip($opatch_dir & "BuildPatch.zip", $extract_dir) If$osbit = "32" Then
Local $aFileList = _FileListToArray($extract_dir, "*win32*")
_ExtractZip($extract_dir &$aArray[1], $extract_dir) ElseIf$osbit = "64" Then
Local $aFileList = _FileListToArray($extract_dir, "*amd*")
_ExtractZip($extract_dir &$aArray[1], $extract_dir) EndIf Sleep(5000) Exit ; #FUNCTION# ;=============================================================================== ; ; Name...........: _ExtractZip ; Description ...: Extracts file/folder from ZIP compressed file ; Syntax.........: _ExtractZip($sZipFile, $sDestinationFolder) ; Parameters ....:$sZipFile - full path to the ZIP file to process
;                  $sDestinationFolder - folder to extract to. Will be created if it does not exsist exist. ; Return values .: Success - Returns 1 ; - Sets @error to 0 ; Failure - Returns 0 sets @error: ; |1 - Shell Object creation failure ; |2 - Destination folder is unavailable ; |3 - Structure within ZIP file is wrong ; |4 - Specified file/folder to extract not existing ; Author ........: trancexx, modifyed by corgano ; ;========================================================================================== Func _ExtractZip($sZipFile, $sDestinationFolder,$sFolderStructure = "")

Local $i Do$i += 1
$sTempZipFolder = @TempDir & "\Temporary Directory " &$i & " for " & StringRegExpReplace($sZipFile, ".*\\", "") Until Not FileExists($sTempZipFolder) ; this folder will be created during extraction

Local $oShell = ObjCreate("Shell.Application") If Not IsObj($oShell) Then
Return SetError(1, 0, 0) ; highly unlikely but could happen
EndIf

Local $oDestinationFolder =$oShell.NameSpace($sDestinationFolder) If Not IsObj($oDestinationFolder) Then
DirCreate($sDestinationFolder) ;~ Return SetError(2, 0, 0) ; unavailable destionation location EndIf Local$oOriginFolder = $oShell.NameSpace($sZipFile & "\" & $sFolderStructure) ; FolderStructure is overstatement because of the available depth If Not IsObj($oOriginFolder) Then
Return SetError(3, 0, 0) ; unavailable location
EndIf

Local $oOriginFile =$oOriginFolder.Items();get all items
If Not IsObj($oOriginFile) Then Return SetError(4, 0, 0) ; no such file in ZIP file EndIf ; copy content of origin to destination$oDestinationFolder.CopyHere($oOriginFile, 20) ; 20 means 4 and 16, replaces files if asked DirRemove($sTempZipFolder, 1) ; clean temp dir

Return 1 ; All OK!

EndFunc

##### Share on other sites

In your code, something is strange :

Local $aArray[0],$aArray[1]  => you are declaring an array two times, and you don't use it after, so you can delete this line

Local $aFileList = _FileListToArray($extract_dir, "*win32*")
_ExtractZip($extract_dir &$aArray[1], $extract_dir) =>$aArray[1] does not exists, because you have declared $aArray with just one element (row 0). You may want to use$aFileList, which is the result of _FileListToArray

Replace $aArray[1] by$aFileList[1], but I don't understand which file you want to extract. Instead of $aFileList[1], you should use the file name (if you know if, of course) #### Share this post ##### Link to post ##### Share on other sites Universalist, I was in the process of updating this thread when you posted. Yes, I need to use$aFileList since that is what is capturing the return of _FileListToArray!  I was just relying too much on examples, and this was my first time using an array.  Thank you.

The reason I need to do this is that the name of the zip file to extract will never be the same, as it contains a build number that increments with each build.

##### Share on other sites

OK.

Universalist is a "level" title. jguinch is my name

##### Share on other sites

Duh...my apologies.  And thanks again.

## Create an account

Register a new account

• ### Similar Content

• I need to dynamically resize my 2d array while looping.
I know this code:
ReDim $rArray[UBound($rArray) + 1] works for the rows, however, I also need to increase the columns. How would i go about increasing both rows and columns while looping?
• By Zaoka
Hi guys
Need little help with filtering.
I'm trying to filter specific weeks from power pivot table using this code recorded with Excel VBA :

#include <Excel.au3> Global $oExcel = _Excel_Open() Global$oWorkbook = _Excel_BookOpen($oExcel, "C:\Users\....\Orders.xlsb")$oWorkbook.PivotTables("PivotTable1").PivotFields( _ "[Report 2].[Week].[Week]").VisibleItemsList = Array( _ "[Report 2].[Week].&[10]", "[Report 2].[Week].&[11]", _ "[Report 2].[Week].&[12]", "[Report 2].[Week].&[13]", _ "[Report 2].[Week].&[14]", "[Report 2].[Week].&[15]") But get error
error: Array(): undefined function. Not sure how to resolve this.
• By LxP
I'm trying to pass a nested array to a function, such that the function alters the inner array.
I was surprised to find that this minimal reproducible example, despite its use of ByRef, seems to pass a copy of the inner array to the function:
#include <Array.au3> ; a boring old array Local $aInnerArray[5] = [1, 2, 3, 4, 5] ; a one-element array containing a reference to the other array Local$aOuterArray[1] = [$aInnerArray] ; intention: take a nested array and alter its inner array ; reality: the inner array seems to be getting copied Func ChangeIt(ByRef$aOuter) Local $aInner =$aOuter[0] $aInner[2] = 0 EndFunc ; Expected: [1, 2, 3, 4, 5] ; Actual: [1, 2, 3, 4, 5] ✔ _ArrayDisplay($aInnerArray, 'Before') ; $aOuterArray passed by-ref, should receive reference to$aInnerArray ; Therefore should change $aInnerArray to [1, 2, 0, 4, 5] ChangeIt($aOuterArray) ; Expected: [1, 2, 0, 4, 5] ; Actual: [1, 2, 3, 4, 5] ✘ _ArrayDisplay($aInnerArray, 'After') I suspect that either: the copy is taking place in the first line of the function (I couldn't find a way to access the inner array without first assigning it to a variable though); or ByRef doesn't propagate into inner levels of the data structure being passed, which seems less likely to me. Could someone please point me in the right direction to get this working as intended? Update: the answer ; WRONG: ; a one-element array containing a reference to the other array Local$aOuterArray[1] = [$aInnerArray] The assumption I made about this code is wrong—it actually copies$aInnerArray into $aOuterArray, so there are now two unrelated$aInnerArray instances.  It is not possible to store arrays in other arrays by reference.
If it is necessary to refer to a mutable array in multiple places, consider holding it in a global variable.  Where a collection of mutable arrays needs to be accessed in multiple places (as in my case), consider storing them in a global array and referring to each sub-array by index (also known as the Registry pattern).
• By VinMe
HELLO All,
is there any function in Auto it to Remove the repeating  strings separated by ","  which is present in the array.
ex.
Available state
a[0]= D97,D96,,D85,D86,D85,D86,D85,D86,D85,,D86,D85,D86,D85,D86
a[1]=D85,D24,,,,,D85
Required state
a[0]= D97,D96,D85,D86,
a[1]=D85,D24
vin!

• Hi all, I wasnt active in this Forum forum for Years. 😅
Since I need something with Json in AutoIt i write a little UDF to save a variable to file to read it with another language - and back. After a while until my other script grows i thought - lets integrate all variables wich is possible, because i want have arrays to.
This is my first public UDF in Autoit - normaly my AutoIt scripts are quick an dirty.... - like the examples for this udf. - someone want to write nice examples?
I tried to write this UDF properly, cared for processing speed, low mem consumption as possible, a short code, and a high usability without beeing very familiar with arrays.
What is it for? - convert nearly all types of variables to a json string for saving it in a file or to an ini. Read it back in to a same formated variable and preserv variable types. All array types are supported with nested arrays, the only restriction is ram and array/stringsize - and time if the array is very big. You can use Filters for variable types and some other options.
If anyone found a bug or any suggestions, please post it.

get Json.au3 from here Json.au3

JsonVar 2019.01.25.1.zip
×

• Wiki

• Back

• #### Beta

• Git
• FAQ
• Our Picks
×
• Create New...