Что нового

[Автоматизация] Сортировка файлов и работа с DBF

serzhu

Новичок
Сообщения
1
Репутация
0
Доброго времени суток. :laugh:

Что есть:
В папке находятся группы файлов (название всегда разное - расширения .LZH, и .(S))

[spоiler]

MDP1B23.LZH - архив
- PATCH.DBF дата создания 12.01.2012 15:30
- PATCH_DEL.DBF дата создания 12.01.2012 16:30
MDP1B23.(S) - текстовый файл
УДАЛЬТЬ ЗАПИСИ НАХОДЯЩИЕСЯ В PATCH_DEL.DBF
И ДОБАВИТЬ ЗАПИСИ НАХОДЯЩИЕСЯ В PATCH.DBF

MDP1B24.LZH
- PATCH.DBF дата создания 13.01.2012 17:30
MDP1B24.(S)
ДОБАВИТЬ ЗАПИСИ НАХОДЯЩИЕСЯ В PATCH.DBF

MDP1B25.LZH
- PATCH.DBF дата создания 14.01.2012 12:30
MDP1B25.(S)
ДОБАВИТЬ ЗАПИСИ НАХОДЯЩИЕСЯ В PATCH.DBF

MDP1B26.LZH
- PATCH.DBF дата создания 15.01.2012 15:30
- PATCH_DEL.DBF дата создания 15.01.2012 17:30
MDP1B26.(S)
УДАЛЬТЬ ЗАПИСИ НАХОДЯЩИЕСЯ В PATCH_DEL.DBF
И ДОБАВИТЬ ЗАПИСИ НАХОДЯЩИЕСЯ В PATCH.DBF

[/spоiler]

В архиве находятся DBF файлы (название которых известно и не меняется)
а ХХХХХХХ.(S) это описание архива и что с ним необходимо сделать.

Задача:

распаковать файлы из архивов и подлить в ALPATCH.DBF с учетом даты создания (сначала самый старый потом новее, новее и т.д.),
при необходимости удалть записи содержащиеся в PATCH_DEL.DBF из ALPATCH.DBF и только потом добавлять новые записи.

Пока удалось сделать только это

Код:
#include <File.au3>
#include <Array.au3> 
#include <Process.au3>

Global $sINCatalog = @ScriptDir & '\in' ; Здесь лежат новые файлы в архивах
Global $sOUTCatalog = @ScriptDir & '\out' ; Здесь находятся распакованные файлы подготовленные для подгрузки
Global $sTMPCatalog = @ScriptDir & '\tmp' ; Здесь папка временных файлов.

$aFileList = _FileListToArray($sINCatalog, '*', 1)

For $i = 1 To UBound($aFileList) - 1
   $var1 = StringRight($aFileList[$i], 9) ; выражение part1.rar
   $var2 = StringRight($aFileList[$i], 10) ; выражение part01.rar
   $var3 = StringRight($aFileList[$i], 4) ; отделяем расширение файла
   $var4 = StringLeft($aFileList[$i], 8) ; отделяем имя файла от расширения
   
   Select
    Case ($var1 = "part1.rar" OR $var2 = "part01.rar")
	 	_RunDOS(@ScriptDir &'\7z.exe e -y '& $sINCatalog & '\' & $aFileList[$i] & ' -o'& $sTMPCatalog); распаковываем связанный архив	
    Case $var3 = ".LZH" 
        _RunDOS('xcopy /y '& $sINCatalog & '\' & $aFileList[$i] &' '& $sTMPCatalog) ; копируем файлы по маске
		_RunDOS('xcopy /y '& $sINCatalog & '\' & $var4 & '(s)' &' '& $sTMPCatalog) ; копируем файлы сопроводиловки
	 EndSelect
	

Next 
$aFileListTmp = _FileListToArray($sTMPCatalog, '*', 1)  

For $i = 1 To UBound($aFileListTmp) - 1 
   $var1 = StringRight($aFileListTmp[$i], 9) ; выражение part1.rar
   $var2 = StringRight($aFileListTmp[$i], 10) ; выражение part01.rar
   $var3 = StringRight($aFileListTmp[$i], 4) ; отделяем расширение файла
   $var4 = StringLeft($aFileListTmp[$i], 8) ; отделяем имя файла от расширения
   
   Select
    Case $var3 = ".LZH" 
	 	_RunDOS(@ScriptDir &'\7z.exe e -y '& $sTMPCatalog & '\' & $aFileListTmp[$i] & ' -o'& $sOUTCatalog & '\' & $var4) 
        _RunDOS('xcopy /y '& $sTMPCatalog & '\' & $var4 & '(s)' &' '& $sOUTCatalog & '\' & $var4 & '') ; копируем файлы сопроводиловки
	 EndSelect
Next


Для работы с DBF нашел древнюю программу CDBFLITE.exe (в аттаче)
(Может есть что то получше)

Подскажите правильно ли я делаю! и как дальше реализовать задуманное.
Спасибо. :(

Код подправил! А заспойлить не получается. (Будем исправляться).
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Верх