Показать полную графическую версию : [решено] Редактирование функции _FileListToArray()
AzazeLHAck
17-01-2011, 20:45
Ребята, вот проблема:
Мне нужно сделать так, чтобы после:
$nnn = _FileListToArray("Data","*",2)
если папок в папке Data нет, то чтобы он не просто возвращал 0, а вносил его так: $nnn[0] = 0
Вариант ли такое замутить..? Может можно как-нибудь отредактировать функцию _FileListToArray(), если вытащить её из File.au3..?
AzazeLHAck, а зачем? сделать такое можно, но для проверки разного рода условий есть разные значения @error. Вот на них и стоит ориентироваться. Делай проверку. Обычно все так делают. Но если все же тебе нужен именно тот способ что ты описал, то
$nnn = _FileListToArray("Data","*",2)
If @error = 4 Then
Dim $nnn[1] = 0
EndIf
AzazeLHAck
17-01-2011, 21:38
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
AzazeLHAck,
Попробуйте так:#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <File.au3>
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _DirListToArray($sFullPath)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aTemp, $aReturn[1] = [0]
$aTemp = _FileListToArray (http://dundats.mvps.org/help/html/libfunctions/_filelisttoarray.htm)($sFullPath, '*', 2)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$aReturn = $aTemp
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $aReturn
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_DirListToArray
AzazeLHAck
17-01-2011, 22:23
madmasles,
Получилось! :) Спасибо!
For to
так писать нельзя. отсюда и ошибка
madmasles, в твоем коде помимо случаев когда файла/папки нет обработаются и все остальные ошибки.
AzazeLHAck
18-01-2011, 00:40
обработаются и все остальные ошибки. »
А там это не важно, там главное, чтобы работало :)
так писать нельзя. отсюда и ошибка »
Пробелы не считай, это я тут понатыкал, чтобы приблизительный внешний вид придать..
А там это не важно, там главное, чтобы работало »
ну тогда учти, что при
а) неправильном пути
б) неправильно введенном фильре
ты будешь получить тот же результат, что при отсутствии файлов/папок в указанной папке
Пробелы не считай »
я говорил не про пробелы, они роли не играют. дело в структуре цикла, нельзя не указывать начальный и конечные индексы.
madmasles
18-01-2011, 00:52
kaster,
Вопрос изначально был
если папок в папке Data нет, то чтобы он не просто возвращал 0, а вносил его так: $nnn[0] = 0 »Если надо обработать ошибки, то можно поменять на#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <File.au3>
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <Array.au3>
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $aDir, $sText = 'Все OK!'
$sPath = @DesktopDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@desktopdir) & '\MyFolder'
$aDir = _DirListToArray($sPath)
Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error)
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) 1
$sText = 'Нет такой папки.'
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) 2
$sText = 'Это не папка.'
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) 4
$sText = 'Нет папок.'
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
_ArrayDisplay (http://dundats.mvps.org/help/html/libfunctions/_arraydisplay.htm)($aDir, $sText)
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _DirListToArray($sFullPath)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aTemp, $aReturn[1] = [0]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) FileExists (http://www.autoitscript.com/autoit3/docs/functions/FileExists.htm)($sFullPath) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1, 0, $aReturn)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) StringInStr (http://www.autoitscript.com/autoit3/docs/functions/StringInStr.htm)(FileGetAttrib (http://www.autoitscript.com/autoit3/docs/functions/FileGetAttrib.htm)($sFullPath), 'D') Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(2, 0, $aReturn)
$aTemp = _FileListToArray (http://dundats.mvps.org/help/html/libfunctions/_filelisttoarray.htm)($sFullPath, '*', 2)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$aReturn = $aTemp
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(@error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error), 0, $aReturn)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_DirListToArray
если папок в папке Data нет »
за него отвечает @error = 4. зачем остальные коды ошибок?
madmasles
18-01-2011, 03:21
зачем остальные коды ошибок? »Чтобы узнать причину того, почему вернулся массив с 0 в $aAr[0]. Я не знаю, что нужно автору темы вернуть, если будут другие ошибки.
AzazeLHAck
18-01-2011, 05:36
нельзя не указывать начальный и конечные индексы. »
:) Я знаю, что нельзя, я ведь написал просто, какие команды там стоят, данные нет смысла писать, они как всегда..
Я не знаю, что нужно автору темы вернуть, если будут другие ошибки. »
Да ничего не нужно, там другие скрипты блокируют другие варианты :)
Спасибо всем, я сделал, как предложил 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
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC