#Include <File.au3>
#Include <Array.au3>
;Демонстрация
$dirExist=DirGetSize("C:\kontur\stat\")
If $dirExist=-1 then
$newPath=InputBox("Неверный путь",'Введите новый путь к папке статистики(stat)')
$Demonstration = Struct_Reader($newPath)
Struct_Finder($Demonstration)
Else
$Demonstration = Struct_Reader('C:\kontur\stat\')
Struct_Finder($Demonstration) ; Вторым параметром этой функции можно задать конкретный каталог
;
EndIf
Func Struct_Reader($TagertDir = @ScriptDir, $OldDir = "")
Dim $Marker
Dim $FirstStep = 1
Global $date
If StringRight($TagertDir, 1) <> "\" Then $TagertDir = $TagertDir & "\"
If $OldDir <> "" Then $TagertDir = $OldDir & $TagertDir
$Dirs=_FileListToArray($TagertDir, "*", 2) ; Определяем вложенные каталоги
If (not IsArray($Dirs)) Then ; Если вложенных каталогов нет, объявляем пустой массив $Dirs
Dim $Dirs[1]
$Marker = "D"
EndIf
;; МОЙ КУСОЧЕК СЦЕНАРИЯ
$Files=_FileListToArray($TagertDir, "Z*", 1) ; Определяем вложенные файлы
$Dialog=InputBox("Создание отчета","Введите дату отсчета в формате ГГММДД" &Chr(10)& @TAB&" для создания отчета")
$bound=UBound($Files,1)
For $i=2 to $bound
$date=StringMid($Files[$i],9,6)
If $Dialog=$date Then
MsgBox(0,$i,$Files[$i])
Else
MsgBox(0,'',$bound)
ExitLoop
EndIf
Next
If (not IsArray($Files)) Then ; Если вложенных файлов нет, объявляем пустой массив $Files
Dim $Files[1]
$Marker = "F"
EndIf
If Ubound($Dirs) + Ubound($Files) > 0 Then ; Подводим итоги предшествующих проверок, - стуктурируем массив
Dim $Structure[$Dirs[0] + $Files[0] + 1][2]
$Structure[0][0] = $TagertDir ; Сохраняем путь к опрошенному каталогу.
; Msgbox(0,"", $Structure[0][0])
If $Marker = "D" Then $Structure[0][1] = "no_dirs" ; Если в дирректории необнаруженно либо файлов либо каталогов
If $Marker = "F" Then $Structure[0][1] = "no_files" ; Оставляем "маркер" мне нужно было для отладки, хотя наверное можно найти и практическое прменение :)
If $Marker <> "D" Then ; Если подиректории есть то опишем их, и отметим как "dir" для избиратеольной рекурсии
For $i = 1 to UBound($Dirs) - 1
$Structure[$i][0] = $Dirs[$i]
$Structure[$i][1] = "dir"
Next
Else
$i = 1
EndIf
If $Marker <> "F" Then ; Если есть вложенные файлы - добавляем их к концу масиива, отмечаем как "File"
; Это мой личный "бзык" так папки будут вверху файлы внизу//
For $z = $i to $i + $Files[0] - 1
$Structure[$z][0] = $Files[$z - $i + 1]
$Structure[$z][1] = "file"
Next
Endif
EndIf
For $i = 1 to Ubound($Structure) - 1 ; Собственно рекурсия функции
If $Structure[$i][1] = "dir" Then
$FirstStep = 0
MSGbox(0, "", "$TagertDir = " & $Structure[$i][0] & " $OldDir = " & $Structure[0][0])
$Structure[$i][1] = Struct_Reader($Structure[$i][0], $Structure[0][0])
EndIf
Next
Return $Structure
EndFunc
Func Struct_Finder ($TagertArray, $TagertDir = "")
If $TagertDir = "" Then $TagertDir = $TagertArray[0][0]
If StringRight($TagertDir, 1) = "\" Then $TagertDir = StringTrimRight($TagertDir, 1)
If StringRight($TagertArray[0][0], 1) = "\" Then $TagertArray[0][0] = StringTrimRight($TagertArray[0][0], 1)
; Msgbox(0, "", "$TagertArray = " & $TagertArray[0][0] & " | $TagertDir = " & $TagertDir)
; Msgbox(0, "", $TagertArray[0][0] = $TagertDir)
If $TagertArray[0][0] <> $TagertDir Then
For $i = 1 to UBound($TagertArray)-1
If IsArray($TagertArray[$i][1]) Then Struct_Finder($TagertArray[$i][1], $TagertDir)
Next
Else
$Result = $TagertArray
EndIf
_ArrayDisplay($Result, "Result")
EndFunc