Что нового

Ошибка при отсутствии массива

joparezzz

Новичок
Сообщения
65
Репутация
0
Написал программу для подсчета количества листов PDF файлов. Работает корректно если в папках есть PDF файлы.
Если в папке нет PDF файла выходит ошибка:
Код:
Subscript used with non-Array variable.:
For $j = 1 To $sFileListFull[0]
For $j = 1 To $sFileListFull^ ERROR
если отсутствуют файлы PDF, то массив не образуется. Как обойти проблему?

Код:
#include <GUIListView.au3>
#include <Array.au3>
#include <FileOperations.au3>
#include <File.au3>

Global $MediaBox[100]
Global $MediaBoxEx[1][1]
Global $MediaBoxExFinal[1][1]
Global $sAllPages

$sFolder = "F:\2018\Лот А-8.19.18\ПМН"
$aFolderList = _FO_FolderSearch($sFolder, '', True, 125)
$sFileListFull = _FO_FileSearch($sFolder, 'pdf', True, 0, 1, 1, 0)
$sFileListFile = _FO_FileSearch($sFolder, 'pdf', True, 0, 2, 1, 0)

$i = 1
$t = 0

_FileList()

For $i = 1 To $aFolderList[0]
	$sFileListFull = _FO_FileSearch($aFolderList[$i], 'pdf', True, 0, 1, 1, 0)
	$sFileListFile = _FO_FileSearch($aFolderList[$i], 'pdf', True, 0, 2, 1, 0)
	_FileList()
Next

ConsoleWrite('Общее количество файлов PDF: ' & $t & @CRLF)
ConsoleWrite('Общее количество листов: ' & $sAllPages & @CRLF)

Func _PDFinfo($way_to_file)
    $chFileHnd = FileOpen($way_to_file, 0)
    Do
		$chFileTxt = FileRead($way_to_file)
    Until @error = 0
    $MediaBox = StringSplit($chFileTxt, "MediaBox", 1)
    _ArrayDelete ($MediaBox, 0)
    _ArrayDelete ($MediaBox, 0)
    ReDim $MediaBoxEx[UBound($MediaBox)][2]
    ReDim $MediaBoxExFinal[UBound($MediaBox)][3]
    For $i = 0 to Ubound($MediaBox) - 1 step 1
        $_2 = StringInStr($MediaBox[$i], " ", 0, 2)
        $_3 = StringInStr($MediaBox[$i], " ", 0, 3)
        $_res = StringInStr($MediaBox[$i], "]/Res", 0, 1)
        $MediaBoxEx[$i][0] = StringMid($MediaBox[$i], $_2, $_3-$_2)
        $MediaBoxEx[$i][1] = StringMid($MediaBox[$i], $_3, $_res-$_3)
    Next
    FileClose($chFileHnd)
    Return $MediaBoxExFinal
EndFunc

Func _FileList()
	ConsoleWrite(@TAB & "'" & $i & '.0' & @TAB & $aFolderList[$i] &  @CRLF)
	For $j = 1 To $sFileListFull[0]
		_PDFinfo ( $sFileListFull[$j] )
		$sPages = Ubound($MediaBoxExFinal)
		$sAllPages = $sAllPages + $sPages
		$t = $t + 1
		ConsoleWrite($t & @TAB & "'" & $i & '.' & $j & @TAB &  $sFileListFile[$j] & @TAB & StringStripCR($sPages) &  @CRLF)
	Next
	ConsoleWrite(@CRLF)
EndFunc
 

gunter123

Продвинутый
Сообщения
159
Репутация
69
Используйте IsArray для проверки переменной
Код:
Func _FileList()
    If Not IsArray($sFileListFull) Then Return
    ConsoleWrite(@TAB & "'" & $i & '.0' & @TAB & $aFolderList[$i] &  @CRLF)
    For $j = 1 To $sFileListFull[0]
        _PDFinfo ( $sFileListFull[$j] )
        $sPages = Ubound($MediaBoxExFinal)
        $sAllPages = $sAllPages + $sPages
        $t = $t + 1
        ConsoleWrite($t & @TAB & "'" & $i & '.' & $j & @TAB &  $sFileListFile[$j] & @TAB & StringStripCR($sPages) &  @CRLF)
    Next
    ConsoleWrite(@CRLF)
EndFunc
 
Верх