"Array Fariable Subcript Screpated بشكل سيء" في Autoit
-
27-09-2019 - |
سؤال
أحصل على الخطأ التالي في البرنامج النصي التلقائي:
"صفيف متغير فرقة تنسيق بشكل سيء."
ويتم إلقاؤه على هذا الخط: 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]
أيه أفكار؟
المحلول
أظن أنك إما ليس لديك أي دلالات فرعية أو رمزك للعثور عليها لا يعمل بشكل صحيح. لذا فإن الكود الخاص بك يحاول إعلان صفيف بطول 0.
أضف هذا السطر مباشرة قبل السطر حيث تحصل على الخطأ.
MsgBox(0, "Value of $countDirs", $countDirs)
تحديث
_FileListToArray
إرجاع أسماء الملف/المجلد فقط ، وليس المسار الكامل. الدعوة إلى FileGetAttrib
يعيد سلسلة فارغة لأنها لا تجد الملف/المجلد. تعديل الخاص بك If
لتضمين المسار الأصل مع اسم الملف.
If StringInStr(FileGetAttrib($dir & "\" & $allOfDir[$i]), "D") Then
نصائح أخرى
تشغيل التعليمات البرمجية الخاصة بك ، أحصل على خطأ فقط إذا كانت $ countdirs أو $ countfiles تساوي 0. يجب أن تتحقق من ذلك قبل محاولة استخدام هذه القيم عند إعلان المصفوفات.
أيضًا ، ملاحظة سريعة ، تبدأ حلقة الخاص بك من 0 ... في Auotit ، يحتفظ فهرس الصفيف بعدد العناصر الموجودة في الصفيف. يمكنك أن تفعل ذلك مثل هذا بدلاً من ذلك:
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