"Array Fariable Subcript Screpated بشكل سيء" في Autoit

StackOverflow https://stackoverflow.com/questions/2851690

  •  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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top