Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Редактирование функции _FileListToArray() (http://forum.oszone.net/showthread.php?t=196908)

AzazeLHAck 17-01-2011 20:45 1590977

Редактирование функции _FileListToArray()
 
Ребята, вот проблема:
Мне нужно сделать так, чтобы после:
Код:

$nnn = _FileListToArray("Data","*",2)
если папок в папке Data нет, то чтобы он не просто возвращал 0, а вносил его так: $nnn[0] = 0
Вариант ли такое замутить..? Может можно как-нибудь отредактировать функцию _FileListToArray(), если вытащить её из File.au3..?

kaster 17-01-2011 21:09 1590989

AzazeLHAck, а зачем? сделать такое можно, но для проверки разного рода условий есть разные значения @error. Вот на них и стоит ориентироваться. Делай проверку. Обычно все так делают. Но если все же тебе нужен именно тот способ что ты описал, то
Код:

$nnn = _FileListToArray("Data","*",2)
If @error = 4 Then
      Dim $nnn[1] = 0
EndIf


AzazeLHAck 17-01-2011 21:38 1591022

kaster,
Почему-то пишет Syntax error.. :(
Общий вид таков:
Код:

Func 123()
        For    to
                $nnn = _FileListToArray("Data","*",2)
                If @error = 4 Then
                        Dim $nnn[1] = 0
                EndIf
        Next
EndFunc

В чём может быть проблема..?

madmasles 17-01-2011 22:05 1591043

AzazeLHAck,
Попробуйте так:
Код:

#include <File.au3>

Func _DirListToArray($sFullPath)
    Local $aTemp, $aReturn[1] = [0]
    $aTemp = _FileListToArray($sFullPath, '*', 2)
    If Not @error Then
        $aReturn = $aTemp
    EndIf
    Return $aReturn
EndFunc  ;==>_DirListToArray


AzazeLHAck 17-01-2011 22:23 1591060

madmasles,
Получилось! :) Спасибо!

kaster 17-01-2011 22:25 1591061

Код:

        For    to
так писать нельзя. отсюда и ошибка

madmasles, в твоем коде помимо случаев когда файла/папки нет обработаются и все остальные ошибки.

AzazeLHAck 18-01-2011 00:40 1591128

Цитата:

Цитата kaster
обработаются и все остальные ошибки. »

А там это не важно, там главное, чтобы работало :)
Цитата:

Цитата kaster
так писать нельзя. отсюда и ошибка »

Пробелы не считай, это я тут понатыкал, чтобы приблизительный внешний вид придать..

kaster 18-01-2011 00:51 1591138

Цитата:

Цитата AzazeLHAck
А там это не важно, там главное, чтобы работало »

ну тогда учти, что при
а) неправильном пути
б) неправильно введенном фильре
ты будешь получить тот же результат, что при отсутствии файлов/папок в указанной папке
Цитата:

Цитата AzazeLHAck
Пробелы не считай »

я говорил не про пробелы, они роли не играют. дело в структуре цикла, нельзя не указывать начальный и конечные индексы.

madmasles 18-01-2011 00:52 1591141

kaster,
Вопрос изначально был
Цитата:

Цитата AzazeLHAck
если папок в папке Data нет, то чтобы он не просто возвращал 0, а вносил его так: $nnn[0] = 0 »

Если надо обработать ошибки, то можно поменять на
Код:

#include <File.au3>
#include <Array.au3>

Global $aDir, $sText = 'Все OK!'

$sPath = @DesktopDir & '\MyFolder'

$aDir = _DirListToArray($sPath)
Switch @error
    Case 1
        $sText = 'Нет такой папки.'
    Case 2
        $sText = 'Это не папка.'
    Case 4
        $sText = 'Нет папок.'
EndSwitch
_ArrayDisplay($aDir, $sText)


Func _DirListToArray($sFullPath)
    Local $aTemp, $aReturn[1] = [0]
    If Not FileExists($sFullPath) Then Return SetError(1, 0, $aReturn)
    If Not StringInStr(FileGetAttrib($sFullPath), 'D') Then Return SetError(2, 0, $aReturn)
    $aTemp = _FileListToArray($sFullPath, '*', 2)
    If Not @error Then
        $aReturn = $aTemp
    EndIf
    Return SetError(@error, 0, $aReturn)
EndFunc  ;==>_DirListToArray


kaster 18-01-2011 02:53 1591168

Цитата:

Цитата madmasles
если папок в папке Data нет »

за него отвечает @error = 4. зачем остальные коды ошибок?

madmasles 18-01-2011 03:21 1591174

Цитата:

Цитата kaster
зачем остальные коды ошибок? »

Чтобы узнать причину того, почему вернулся массив с 0 в $aAr[0]. Я не знаю, что нужно автору темы вернуть, если будут другие ошибки.

AzazeLHAck 18-01-2011 05:36 1591188

Цитата:

Цитата kaster
нельзя не указывать начальный и конечные индексы. »

:) Я знаю, что нельзя, я ведь написал просто, какие команды там стоят, данные нет смысла писать, они как всегда..

Цитата:

Цитата madmasles
Я не знаю, что нужно автору темы вернуть, если будут другие ошибки. »

Да ничего не нужно, там другие скрипты блокируют другие варианты :)
Спасибо всем, я сделал, как предложил madmasles

Код:

#include <File.au3>

Func _DirListToArray($sFullPath)
    Local $aTemp, $aReturn[1] = [0]
    $aTemp = _FileListToArray($sFullPath, '*', 2)
    If Not @error Then
        $aReturn = $aTemp
    EndIf
    Return $aReturn
EndFunc  ;==>_DirListToArray



Время: 17:30.

Время: 17:30.
© OSzone.net 2001-