Что нового

[Автоматизация] Проверка существования катологов

gh0st

Новичок
Есть каталог-родитель,в нем каталоги
D:\transfer\gruz\01004
D:\transfer\gruz\01005
D:\transfer\gruz\01006
D:\transfer\gruz\01007
D:\transfer\gruz\0101
D:\transfer\gruz\01010
D:\transfer\gruz\01011
D:\transfer\gruz\01012
D:\transfer\gruz\01013
D:\transfer\gruz\01014
и т.д.
Список каталогов прилагается.
Есть файл EXEL c таблицей(см.приложения)

Задача:Взять значение 1 строки,1 столбца и узнать существует ли каталог с таким именем.
Если "ДА" перейти к 2 строке,если "НЕТ"-удалить эту строку в EXEL файле.

Проблема: В начале имен катологов есть "Нули",и их к-во разное

Думаю,что надо использовать String-функции,но как не пойму.

Заранее,спасибо!

Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Process.au3>
#include <Date.au3>
#include <Excel.au3>
#include <Array.au3>
#Include <WinAPIEx.au3>
#include <GDIPlus.au3>
#include <FileConstants.au3>
;==========================================================================================
;Предустановки:События в Интерфейсе,Координаты в клиентском окне
Opt("GUIOnEventMode", 1)
Opt("MouseCoordMode", 2)
Opt('MustDeclareVars', 1)
Opt("TrayIconDebug", 1)
;==========================================================================================

;==========================================================================================
#Region ### START Koda GUI section ###
Global $Form1 = GUICreate("Проверка каталогов", 363, 182, 326, 266)
Global $Group1 = GUICtrlCreateGroup("Настройки", 8, 0, 345, 89)
Global $Input1 = GUICtrlCreateInput("", 80, 24, 193, 21)
Global $Input2 = GUICtrlCreateInput("", 80, 56, 193, 21)
Global $Button1 = GUICtrlCreateButton("Выбрать...", 280, 24, 65, 25)
Global $Button2 = GUICtrlCreateButton("Выбрать...", 280, 56, 65, 25)
Global $Label1 = GUICtrlCreateLabel("Exel база:", 24, 24, 54, 17)
Global $Label2 = GUICtrlCreateLabel("Каталог:", 24, 56, 48, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
Global $Progress1 = GUICtrlCreateProgress(8, 136, 345, 33)
Global $Button3 = GUICtrlCreateButton("Запуск проверки", 120, 96, 129, 25)

GUICtrlSetOnEvent($Button1, "GetImgPath")
GUICtrlSetOnEvent($Button2, "GetImgPath2")
GUICtrlSetOnEvent($Button3, "Submit")

GUIRegisterMsg($WM_SYSCOMMAND, 'WM_SYSCOMMAND')
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	Global $nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

	EndSwitch
WEnd
;=========================================================================================
;Пауза,Выход и закрытие по HotKey
Global $Paused
HotKeySet("{PAUSE}", "TogglePause")
HotKeySet("{Esc}", "eExit")
Func TogglePause();Функция паузы
    $Paused = NOT $Paused
    While $Paused
    sleep(50)
		ToolTip('Скрипт "Остановлен"',0,0)
    WEnd
    ToolTip("")
EndFunc
Func eExit();Функция выхода
   ProcessClose("EXCEL.exe")
Exit 0
EndFunc
;=========================================================================================
Func WM_SYSCOMMAND($hWnd, $iMsg, $wParam, $lParam)
    Switch $wParam
        Case 0xF060 ; SC_CLOSE
            Exit
    EndSwitch
    Return $GUI_RUNDEFMSG
EndFunc
;=========================================================================================
;Функция получения полного пути к Exel сводной
Func GetImgPath()

   Global $sFile = FileOpenDialog("Выберите Файл Exel", @DesktopDir, "Маска (*.xls)", 1)
    If Not @error Then GUICtrlSetData($Input1, $sFile)
EndFunc
;=========================================================================================
;Функция получения полного пути к дириктории с фото
Func GetImgPath2()

   Global $sFile2 = FileSelectFolder('Выберите папку с фото', '', 3, @DesktopDir, $Form1)&"\"
    If Not @error Then GUICtrlSetData($Input2, $sFile2)
EndFunc
;==========================================================================================
;Функция "Запуск"
Func Submit()

	If ProcessExists('EXCEL.exe') Then
        ProcessClose("EXCEL.exe")
    EndIf
    If @error Then
        MsgBox(16, 'Error', '_ExcelBookOpen')
       Exit
    EndIf
;========================================================
;Проверка Log файла:если есть удалить					;
If FileExists(@ScriptDir&"\Log.txt") Then				;
FileDelete(@ScriptDir&"\Log.txt")						;
EndIf													;
;========================================================
;==========================================================================================
;Проверки заполнения Формы GUI
Global $PutXLS=GUICtrlRead($Input1)
Global $PutFoto=GUICtrlRead($Input2)

If $PutXLS="" Then
    MsgBox(16, 'Error',"Не указан путь до EXEL базы!")
	Return GUICtrlSetOnEvent($Button3, "Submit")
EndIf
If $PutFoto="" Then
    MsgBox(16, 'Error',"Не указан путь до католога с фото!")
	Return GUICtrlSetOnEvent($Button3, "Submit")
EndIf
;==========================================================================================
;FileCopy($sFile, StringRegExpReplace($sFile, '^.*\\(.*(\.)(.*)|.*)$', StringReplace($sFile, '\', '\\') & '\2\3'),$FC_OVERWRITE)
;==========================================================================================
;Запускаем Exel и получаем его title
;открываем в скрытом режиме
;global $fVisible = 0
;только для чтения
;global $fReadOnly = True
Local $oExcel = _ExcelBookOpen($sFile)
WinWait("[CLASS:XLMAIN]")
global $sTitleExel = WinGetTitle("[ACTIVE]")
sleep(100)
;Активируем Exel
WinActivate($sTitleExel)
WinWaitActive($sTitleExel)
;Номер последней строчки
global $max_row = $oExcel.ActiveSheet.UsedRange.Rows.Count
;Прочитать колонку ячеек
Local $aArray1 = _ExcelReadArray($oExcel, 1, 5, $max_row, 1, 1)
;_ArrayDisplay($aArray1, "Vertical")столбец
global $column = 1
;строка
global $row = 2 ;Начальная строка!
Global $search_cell = $oExcel.Activesheet.Cells($row, $column).Value
;запись положительного результата поиска
global $write_row_num[$max_row +1]
;последняя запись положительного результата
global $last_row_num = 1
;=================================================================================================================
	;Начало основных манипуляций
Do
            global $max_row = $oExcel.ActiveSheet.UsedRange.Rows.Count
			if $search_cell <> "" and $search_cell <> " ----" then
            ;запись положительного результата поиска
                $write_row_num[$last_row_num] = $row
            ;переход к следующей ячейке для записи результата
                $last_row_num = $last_row_num + 1
            EndIf

    $search_cell = $oExcel.Activesheet.Cells($row, $column).Value

		If FileExists($sFile2&"0"&$search_cell)=0 Then
			 _ExcelRowDelete($oExcel,$row,1)
			 FileWrite(@ScriptDir & "\Log.txt",$search_cell & " - удалил! :(" & @CRLF)
		 EndIf
		 If FileExists($sFile2&"0"&$search_cell)=1 Then
			 FileWrite(@ScriptDir & "\Log.txt",$search_cell & " - OK!" & @CRLF)
			 ;переход к следующей ячейке для поиска в столбце
			 $row = $row + 1
		EndIf

Until $row = $max_row

_ExcelBookSaveAs($oExcel, @ScriptDir & "\Обработанный.xls", "xls", 0, 1)
_ExcelBookClose($oExcel)
MsgBox(4096, "Закончили!", "Все сделано!=)"& @CR &"Посмотрите Log.txt!")
eExit()

EndFunc
 

Вложения

edyapd

Осваивающий
Не знаю на сколько правильно я понял, но как-то так
Код:
$str = 'D:\transfer\gruz\01004'
$pattern = '.*\\0*(\d*)'
$out = StringRegExpReplace($str, $pattern, '$1')
ConsoleWrite($out & @LF)
 

inververs

AutoIT Гуру
Excel скорее всего вместо 000006282 при чтении отдаст тебе 6282 и из за этого у тебя проблема.
Попробуй вместо .Value читать .Formula или в каждой ячейке пиши так: '000006282 (Ставь кавычку в начале нулей).

Посмотрел файлы. Не актуально.
 
Автор
G

gh0st

Новичок
Большое спасибо,edyapd!
Код:
$str = 'D:\transfer\gruz\01004'
$pattern = '.*\\0*(\d*)'
$out = StringRegExpReplace($str, $pattern, '$1')
ConsoleWrite($out & @LF)

Думаю подойдет!Пойду изучать регулярные выражения!
 
Верх