自動車で「配列変数の添え字式がひどくフォーマットされています」

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

  •  27-09-2019
  •  | 
  •  

質問

自動車スクリプトで次のエラーが発生します。

「配列変数subscriptがひどくフォーマットされています。」

そして、それはこの行に投げられます: 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に等しい場合にのみエラーが表示されます。配列を宣言するときにこれらの値を使用しようとする前に、これをチェックする必要があります。

また、簡単な注意として、forループは0から始まります... auotitでは、配列の0インデックスが配列内のアイテムのカウントを保持します。代わりにこのように行うことができます:

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