Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Последовательная работка файлов из подпапок

Ответить
Настройки темы
Последовательная работка файлов из подпапок

Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Приветствую ! Поделитесь пожалуйста куском кода если у кого есть.
Требуется следующее: имеется папка внутри которой подпапки с файлами (например txt), структура вложений может быть большой.
Нужно последовательно обработать каждый файл и сохранить в "родной" папке но с другим названием.

Отправлено: 12:18, 02-04-2009

 

Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


пример получения подкаталогов с файлами по маске.
легко можно встроить необходимую обработку ))

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 16:47, 02-04-2009 | #2



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

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


А как сделать последовательную обработку файлов из этого списка ? В циклах недопонимаю как правильно сделать. Подскажите ?

Отправлено: 07:53, 09-04-2009 | #3


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
Global  $sStartDirPath = @WindowsDir & '\help'
Local   $sEndDirPath = 'c:\help\'

ToolTip('Пожалуйста, подождите...', 10, 70, 'Поиск файлов')
Local   $aFilesPath =  _GetDirsFilesList($sStartDirPath, '*', 1)
_EditAndCopyFiles($aFilesPath, $sEndDirPath)
ToolTip('Готово' & @CRLF & 'Результат в папке: ' & $sEndDirPath, 10, 70, 'Поиск и копирование файлов')
Sleep(3000)

Func _EditAndCopyFiles($aFilesPath, $sDirDest)
;~  В эту функцию вставивайте необходимую обработку.
    $sDirDest = StringRegExpReplace($sDirDest, '\\+$', '')
    Local $i, $sNewFileName, $sNewFileType, $sNewFileDirPath

    ToolTip('Всего файлов: ' & $aFilesPath[0], 10, 70, 'Копирование файлов')

    For $i=1 To $aFilesPath[0]
        $sNewFileName = StringRegExpReplace($aFilesPath[$i], '.+\\(.+)', '\1')
        $sNewFileType = StringRegExpReplace($sNewFileName, '.+\.(.+)', '\1'); новое расширение файла
        $sNewFileName = StringReplace($sNewFileName, '.' & $sNewFileType, '') & ' 2'; новое имя файла
        $sNewFileDirPath = $sDirDest & StringReplace($aFilesPath[$i], $sStartDirPath, '')
        $sNewFileDirPath = StringRegExpReplace($sNewFileDirPath, '(.+)\\.+', '\1'); новая папка файла

        ToolTip('Всего файлов: ' & $aFilesPath[0] & @CRLF & _
                'Копируется файл: ' & $i & @CRLF & _
                'Из: ' & $aFilesPath[$i] & @CRLF & _
                'В: ' & $sNewFileDirPath & '\' & $sNewFileName & '.' & $sNewFileType, _
                10, 70, 'Копирование файлов')

        FileCopy($aFilesPath[$i], $sNewFileDirPath & '\' & $sNewFileName & '.' & $sNewFileType, 1+8); копирование с заменой файлов и созданием + создавать соответствующую структуру папок получателя, если ее нет
    Next
EndFunc

Func _GetDirsFilesList($sStartDirPath, $sFilesMask, $iAddFiles=1, $iAddDirs=0, $sRootPath=1)
    $sStartDirPath = StringRegExpReplace($sStartDirPath, '\\+$', '')
    Local $aRetArray[1], $aSubDirsArr, $sFindNextFile, $sCurrentPath, $iYesAdd

    Local $sFindFirstFile = FileFindFirstFile($sStartDirPath & '\' & $sFilesMask)
    If @error = 1 Then Return SetError(-1); нет искомых файлов

    If $sRootPath == 1 AND $iAddDirs == 1 Then
        $aRetArray[0] += 1
        ReDim $aRetArray[2]
        $aRetArray[1] = $sStartDirPath
    EndIf

    While 1
        $sFindNextFile = FileFindNextFile($sFindFirstFile)
        If @error = 1 Then ExitLoop

        $sCurrentPath = $sStartDirPath & '\' & $sFindNextFile

        $iYesAdd = 0
        If StringInStr(FileGetAttrib($sCurrentPath), 'D') Then
            If $iAddDirs == 1 Then $iYesAdd = 1
        Else
            If $iAddFiles == 1 Then $iYesAdd = 1
        EndIf

        If $iYesAdd == 1 Then
            $aRetArray[0] += 1
            ReDim $aRetArray[$aRetArray[0]+1]
            $aRetArray[$aRetArray[0]] = $sCurrentPath
        EndIf

        $aSubDirsArr = _GetDirsFilesList($sCurrentPath, $sFilesMask, $iAddFiles, $iAddDirs, 0)

        If IsArray($aSubDirsArr) Then
            For $i = 1 To $aSubDirsArr[0]
                $aRetArray[0] += 1
                ReDim $aRetArray[$aRetArray[0]+1]
                $aRetArray[$aRetArray[0]] = $aSubDirsArr[$i]
            Next
        EndIf
    WEnd

    FileClose($sFindFirstFile)

    SetError(0)
    Return $aRetArray
EndFunc

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 08:46, 09-04-2009 | #4


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


еще вариант с фильтром по регулярному выражению:
Код: Выделить весь код
#include <array.au3>

Dim $a
_GetFileList ($a, "C:\TEST", "(?i)\.TXT$")
_ArrayDisplay($a)

Func _GetFileList (ByRef $array, $root, $regExp = ".*")
    If IsArray($array)=0 Then Dim $array[1]=[0]
    Local $search = FileFindFirstFile($root &"\*"), $file
    While 1
        $file = $root & "\" & FileFindNextFile($search)
        If @error Then ExitLoop
        If StringInStr(FileGetAttrib($file), 'D') Then
            _GetFileList ($array, $file, $regExp)
        ElseIf StringRegExp($file, $regExp) Then
            $array[0]+=1
            ReDim $array[$array[0]+1]
            $array[$array[0]]=$file
        EndIf
    WEnd
EndFunc
Цитата Lodoss:
А как сделать последовательную обработку файлов из этого списка ? »
зависит от того, что понимается под "обрабокой"

Отправлено: 12:12, 09-04-2009 | #5


Новый участник


Сообщения: 35
Благодарности: 0

Профиль | Отправить PM | Цитировать


Под "обработкой" я написал в самом начале, требуется открыть последовательно каждый файл, (для пример я привёл тхт), правим его (добавляем пару строк в конце) и сохраняем в родной папке но с другим названием.
В примерах разбираюсь, для меня циклы и массивы пока тёмный лес

Отправлено: 12:40, 09-04-2009 | #6


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Lodoss, приведите пример обработки одного файла (без циклов и массивов) чтобы было от чего плясать: открытие файла -> преобразование -> формирование нового имени -> сохранение (переделать его для массива дело техники) или с этим тоже проблемы?.. тогда формулируйте детально весь алгоритм обработки файла - какие строки добавляются, имя нового файла, что делать со старым и т.д.

Отправлено: 13:47, 09-04-2009 | #7


Аватара для proxy

Старожил


Сообщения: 460
Благодарности: 152

Профиль | Отправить PM | Цитировать


Lodoss......amel27, дело говорит....
а по поводу массивов и циклов - почитайте справку, русскую справку, разделы "Применение AutoIt" и "Для новичка"....
а далее уже по всем функциям, обязательно на практике разбирая каждый пример...
потом еще удивитесь - как все легко )))

-------
Мысли-читатель сломался, может подробней расскажите?
А где исходный код? Или мы стихи обсуждаем?! )) Настройки темы > Решено ?


Отправлено: 13:53, 09-04-2009 | #8



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Последовательная работка файлов из подпапок

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление Папки и всех подпапок и файлов sashok60 Скриптовые языки администрирования Windows 16 02-03-2016 08:54
CMD/BAT - [решено] удаление всех файлов и подпапок в нескольких папках alexandri Скриптовые языки администрирования Windows 18 12-01-2010 05:33
Запускальщик программ из подпапок папки truvo Хочу все знать 1 26-06-2009 19:16
В OpenOffice Writer нумерация страниц не последовательная Coutty Программное обеспечение Linux и FreeBSD 4 06-05-2008 10:20
Последовательная установка EXE'шников.... Han_Solo Хочу все знать 10 02-06-2007 22:40




 
Переход