« Variable mal formaté souscript de tableau » dans AutoIt
-
27-09-2019 - |
Question
Je reçois l'erreur suivante dans mon script AutoIt:
"variable Array mal formaté indice."
et il est jeté sur cette ligne: 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]
Toutes les idées?
La solution
Je devine que vous ne soit pas de sous-répertoires ou votre code pour les trouver ne fonctionne pas correctement. Donc, votre code tente de déclarer un tableau de 0 longueur.
Ajoutez cette droite ligne avant la ligne où vous obtenez l'erreur.
MsgBox(0, "Value of $countDirs", $countDirs)
UPDATE
_FileListToArray
renvoie uniquement les noms de fichier / dossier, pas le chemin complet. L'appel à FileGetAttrib
retourne une chaîne vide, car il ne trouve pas le fichier / dossier. Modifier votre If
pour inclure le chemin parent avec le nom du fichier.
If StringInStr(FileGetAttrib($dir & "\" & $allOfDir[$i]), "D") Then
Autres conseils
L'exécution du code, je reçois seulement une erreur si $ countDirs ou countFiles $ est égal à 0. Vous devriez vérifier pour avant d'essayer d'utiliser ces valeurs lors de la déclaration de vos tableaux.
En outre, une note rapide, votre boucle For commence à 0 ... en AuotIt l'indice 0 d'un tableau contient le nombre d'éléments dans le tableau. Vous pouvez le faire comme ceci:
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