Что нового

Как узнать номер элемента на котором остановился счетчик

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Понятно.
Вот тут у тебя ошибка
Код:
For $i=1 to UBound($filesarray)
If Not _FileReadToArray('C:\kontur\stat\'& $filesarray[$i],$aRecords) Then
   MsgBox(4096,"Ошибка", " Ошибка чтения файла в массив. @error=" & @error)
   Exit
EndIf
For $i = 1 to $aRecords[0]
;...

Ты и внешний и внутренний циклы делаешь по одному и тому же счетчику $i.
Из-за этого у тебя ошибки лезут.
А должно быть
Код:
For $i1=1 to UBound($filesarray)-1 ; кстати не забудь -1 поставить
If Not _FileReadToArray('C:\kontur\stat\'& $filesarray[$i1],$aRecords) Then
   MsgBox(4096,"Ошибка", " Ошибка чтения файла в массив. @error=" & @error)
   Exit
EndIf
For $i = 1 to $aRecords[0]
 
Автор
P

Pat4005

Новичок
Сообщения
85
Репутация
4
Так вроде считает, но надо ещё проверить как он считает. Обнаружил проблему - когда берешь в промежуток файл с окончанием на 1111.. он выдает ошибку
Код:
MsgBox(4096,"Ошибка", " Ошибка чтения файла в массив. @error=" & @error)
и при этом добавляет в первый элемент массива $aRecords количество записей вместо очередного имени файла.


Добавлено:
Сообщение автоматически объединено:

вот
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Ну, у тебя так функция твоя работает!
Сначала ты создаёшь массив, а потом к нему добавляешь все результаты _FileListToArray, в том числе и количество файлов.
Код:
Dim $ChoosenFiles = _ArrayCreate(0)
; ...
$sFiles = _FileListToArray($path)
For $i = 0 To UBound($sFiles) -1
    $sFormat = StringRegExpReplace($sFiles[$i], 'Z_(.*)_(.*).01', '$2')
    If $sFormat >= $StartData And $sFormat <= $EndData Then
        _ArrayAdd($ChoosenFiles, $sFiles[$i])
    EndIf   
Next
_ArrayDelete($ChoosenFiles, 0) ; <=== Вот это поставь !!!
Return $ChoosenFiles


Показал как исправить.


Добавлено:
Сообщение автоматически объединено:

А лучше вот так
Код:
Dim $ChoosenFiles[1]
; ...
$sFiles = _FileListToArray($path)
$ChoosenFiles[0] = $sFiles[0]
For $i = 1 To UBound($sFiles) -1
    $sFormat = StringRegExpReplace($sFiles[$i], 'Z_(.*)_(.*).01', '$2')
    If $sFormat >= $StartData And $sFormat <= $EndData Then
        _ArrayAdd($ChoosenFiles, $sFiles[$i])
    EndIf   
Next
Return $ChoosenFiles
 
Автор
P

Pat4005

Новичок
Сообщения
85
Репутация
4
Проблема решилась сама собой(или) мной. Вчера ночью видимо что-то подобавлял и сегодня попробовал запустить с _ArrayDelete и он начал удалять лишний элемент. потом попробовал без твоей строки и все заработало нормально. и ещё не знаю что с пустыми файлами делать. Ф-ция _FileReadToArray при нахождении файла без строк выдает ошибку. Я думал может как-то так проверку размера прикрутить? но не выходит(я с циклами совсем не могу подружиться!)
Код:
$sFiles = _FileListToArray($path)
For $i = 0 To UBound($sFiles) -1
	$fsize = FileGetSize("C:\kontur\"&$sFiles[$i])
    $sFormat = StringRegExpReplace($sFiles[$i], 'Z_(.*)_(.*).01', '$2')
    If $sFormat >= $StartData And $sFormat <= $EndData and $fsize>0  Then
        _ArrayAdd($ChoosenFiles, $sFiles[$i])
    EndIf
Next
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Попробуй так:

Код:
$sFiles = _FileListToArray($path)
For $i = 0 To UBound($sFiles) -1
    If FileGetSize($sFiles[$i]) > 0 Then
        $sFormat = StringRegExpReplace($sFiles[$i], 'Z_(.*)_(.*).01', '$2')
        If $sFormat >= $StartData And $sFormat <= $EndData and $fsize>0  Then
            _ArrayAdd($ChoosenFiles, $sFiles[$i])
        EndIf
	EndIf	
Next
 
Верх