# _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? √-1 2^3 ∑ π, and it was delicious! #### 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

• By VollachR
Hi,
I'm looking for a way to take a number value from a Row2 of a 2D array and according to this check if files that appear in rows 3-11 in the array exists.
For example, if the number in Row2 is 5 I need to check for the files in Row 3-6 only, if it is 6 than rows 3-7 and so on.
I thought on using a FOR loop but I have very little experience with those.
Can you suggest the best way to do what I need?
BTW, the files in Rows 3-11 will usually have blank value for any row above the number in Row2 (e.g. Row2 = 5 so Rows3-6 will have values but 8-11 be empty), The values I need are in Column 1 of the array, the name of the key from the INI file that the array was created from is in Column 0.
Full Example:
Row2 of Array:
Col0 = Games# - Col1 = 5
Rows3-6
Col0 = Exe2 - Col1 = Path To File
Col0 = Exe3 - Col1 = Path To File
Col0 = Exe4 - Col1 = Path To File
Col0 = Exe5 - Col1 = Path To File
I need that if Row2 is 5 to check these above for rows if the file exists, if it was 6 then the next row as well and so on up until number 10 in Row2 as it can't go above 10.
So basically for whatever number in Row2 from 2-10 need to check 1-9 rows from 3-11 to see if the files in Col1 exists and if any of them don't exist it should call a function that shows an error message.
I'm pretty sure I have the first line of the for look correct:
For $i = 1 To$aAIO[2][1] Just not sure how to continue from there, also not sure if $i should be equal 1 or 2. Help will be appreciated. • By FMS Hello, I'm trying to get data from twitter to an array and so far I found an Twitter UDF whish lookes very intresting but couldn't get it to work. It lookes not supported any more(2010) and buggy when i read all te replies. More around this subject (autoit and twitter) i couldn't find on this forum. Is there sombody who know's a good way to get live data from twitter to an array inside autoit? (I kinda doubt that this isn't tackled before) In the end I was hoping to get all tweets from date to date from an specific subject inside a 2D array to work whit. • By AndreasNWWWWW I got a question: i am trying to run different functions based upon what i select in these radio buttons.(code below) it needs to check server 1. then run function 1 or function 2 after what i selected in the checkbox. once that function is done it moves to the next one, until it has been trough all 5 iv'e tried using while loops with different while$i equals to something but then i manualy need to go in and edit the script every time.
#include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 615, 437, 192, 124)$Server2 = GUICtrlCreateLabel("Server2", 216, 95, 41, 17) $server1 = GUICtrlCreateLabel("Server1", 216, 72, 41, 17)$server4 = GUICtrlCreateLabel("Server4", 216, 144, 41, 17) $server3 = GUICtrlCreateLabel("Server3", 216, 119, 41, 17)$server5 = GUICtrlCreateLabel("Server5", 216, 170, 41, 17) $Start = GUICtrlCreateButton("Start", 240, 248, 147, 25)$Checkbox1 = GUICtrlCreateCheckbox("function1", 288, 72, 97, 17) $Checkbox2 = GUICtrlCreateCheckbox("function2", 392, 72, 97, 17)$Checkbox3 = GUICtrlCreateCheckbox("function1", 288, 96, 97, 17) $Checkbox4 = GUICtrlCreateCheckbox("function2", 392, 96, 97, 17)$Checkbox5 = GUICtrlCreateCheckbox("function1", 288, 120, 97, 17) $Checkbox6 = GUICtrlCreateCheckbox("function2", 392, 120, 97, 17)$Checkbox7 = GUICtrlCreateCheckbox("function1", 288, 144, 97, 17) $Checkbox8 = GUICtrlCreateCheckbox("function2", 392, 144, 97, 17)$Checkbox9 = GUICtrlCreateCheckbox("function1", 288, 170, 97, 17) $Checkbox10 = GUICtrlCreateCheckbox("function2", 392, 170, 97, 17) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1$nMsg = GUIGetMsg() Switch $nMsg Case$GUI_EVENT_CLOSE Exit EndSwitch WEnd
• By 31290
Hi everyone,
I'm currently writing a script that allow me to list all currently installed software on a computer but some of the are listed in the HKLM64 hive of the registry whereas 95% of all others are in the HKLM "normal" one.
Thing is, I'd like to combine these two reg key into one single ListView item.
Here's my code so far, knowing that it's working on both cases (changing to HKLM64 or HKLM short)
Thanks in advance for the help
-31290-
• By Spartan117
Hi everyone,
I am wondering if is there any autoit function that make the program ignore errors and move on and resume correct lines?
Thank you
×

• Wiki

• Back

• Git