“Variable de subíndice de matriz con formato incorrecto” en AutoIt
-
27-09-2019 - |
Pregunta
Estoy recibiendo el siguiente error en mi script AutoIt:
"variable de subíndice de matriz mal formateado."
y se lanza en esta línea: Local $allDirs[$countDirs]
Func archiveDir($dir)
; Get all the files under the current dir
$allOfDir = _FileListToArray($dir)
Local $countDirs = 0
Local $countFiles = 0
$imax = UBound($allOfDir)
For $i = 0 to $imax - 1
If StringInStr(FileGetAttrib($allOfDir[$i]),"D") Then
$countDirs = $countDirs + 1
Else
$countFiles = $countFiles + 1
EndIf
Next
Local $allDirs[$countDirs]
Local $allFiles[$countFiles]
¿Alguna idea?
Solución
Te estoy adivinando o bien no tienen ningún subdirectorios o su código de encontrarlos no está funcionando correctamente. Así que su código está tratando de declarar una matriz de 0 longitud.
Añadir esta línea justo antes de la línea donde se obtiene el error.
MsgBox(0, "Value of $countDirs", $countDirs)
ACTUALIZACIÓN
_FileListToArray
sólo devuelve los nombres de archivo / carpeta, no la ruta completa. La llamada a FileGetAttrib
está volviendo una cadena vacía porque no encuentra el archivo / carpeta. Modificar If
para incluir la ruta de los padres con el nombre del archivo.
If StringInStr(FileGetAttrib($dir & "\" & $allOfDir[$i]), "D") Then
Otros consejos
El funcionamiento de su código, solo me dan un error si countDirs $ o $ countFiles es igual a 0. Se debe comprobar para este antes de intentar utilizar estos valores al declarar sus matrices.
Además, una nota rápida, el bucle For está empezando a 0 ... AuotIt en el índice 0 de la matriz contiene el número de elementos de la matriz. Se podía hacerlo de esta manera en su lugar:
For $i = 1 to $allOfDir[0]
If StringInStr(FileGetAttrib($allOfDir[$i]), "D") Then
$countDirs+=1
Else
$countFiles+=1
EndIf
Next
If ($coundDirs > 0) Then
Local $allDirs[$countDirs]
; do whatever else you need to do here.
EndIf
If ($countFiles > 0) Then
Local $allFiles[$countFiles]
; do whatever else you need to do here.
EndIf