Что нового

Автоматизация Если Case не совпадает со Switch то запись в файл

Tosyk

Новичок
Сообщения
206
Репутация
0
Autoit Version 3.5.4

1. Есть текстовый файл со списком путей к файлам - каждая строка это 1 путь
2. Есть имя файла, которое я ищу в этом текстовом файле.
3. Есть код:

Код:
Func _FileSearch($_sName)
    Local $_iA, $_sFile
    Local $_sFileDir, $_sFileName, $_sFileType

    For $_iA = 1 To $aListFileSearch[0]
        ;получаем путь к файлу
        $_sFileDir = StringRegExpReplace($aListFileSearch[$_iA], '(^.*)\\(.*)$', '$1')
        ;получаем имя и тип файла
        $_sFileName = StringRegExpReplace($aListFileSearch[$_iA], '(^.*)\\(.*)$', '$2')
        ;получаем только тип файла
        $_sFileType = StringRegExpReplace($_sFileName, '(^.*)\.(.*)$', '$2')
        ;получаем только имя файла
        $_sFileName = StringRegExpReplace($_sFileName, '(^.*)\.(.*)$', '$1')

        ;если имя файла из списка $aListFileSearch совпадает с именем $_sName искомого, то ...
        Switch $_sFileName
            Case $_sName

                ConsoleWrite('Found: ' & $_sFileName & '.' & $_sFileType & @LF)
                If FileExists($aListFileSearch[$_iA]) Then
                  _FileCopy($aListFileSearch[$_iA])
                 Else
                     Local $sFilePath = '"' & $sDrive & FileGetShortName($sFolder) & '\' & $sFileName & '_error.log' & '"'
                     Local $hFileOpen = FileOpen($sFilePath, $FO_APPEND)
                     FileWrite($hFileOpen, $_sFileName & '.' & $_sFileType & " Can't be found")
                 EndIf
                Return 1
            Case Else
                ConsoleWrite('Not found: ' & $_sName & '.' & $_sFileType & @LF)
                 Local $sFilePath = '"' & $sDrive & FileGetShortName($sFolder) & '\' & $sFileName & '_error.log' & '"'
                 Local $hFileOpen = FileOpen($sFilePath, $FO_APPEND)
                 FileWrite($hFileOpen, $_sFileName & '.' & $_sFileType & " Can't be found")
        EndSwitch
    Next
EndFunc

У меня не получается сохранить в лог файл если в коде нет совпадения $_sName с $_sFileName
Я пытаюсь это сделать после Case Else
Если я оставляю ConsoleWrite не закомментированным, то получаю тысячи (по количеству строк в моём текстовом файле) записей в консоль.

подскажите как это сделать?
 

Oki

Продвинутый
Сообщения
452
Репутация
62
А где файл лога закрывается для дальнейшей корректной работы с ним?
 
Автор
Tosyk

Tosyk

Новичок
Сообщения
206
Репутация
0
собственно апдейт по проблеме. я обновил код:
Код:
Func _FileSearch($_sName)
    Local $_iA, $_sFile
    Local $_sFileDir, $_sFileName, $_sFileType

    For $_iA = 1 To $aListFileSearch[0]
        ;получаем путь к файлу
        $_sFileDir = StringRegExpReplace($aListFileSearch[$_iA], '(^.*)\\(.*)$', '$1')
        ;получаем имя и тип файла
        $_sFileName = StringRegExpReplace($aListFileSearch[$_iA], '(^.*)\\(.*)$', '$2')
        ;получаем только тип файла
        $_sFileType = StringRegExpReplace($_sFileName, '(^.*)\.(.*)$', '$2')
        ;получаем только имя файла
        $_sFileName = StringRegExpReplace($_sFileName, '(^.*)\.(.*)$', '$1')

        ;если имя файла из списка $aListFileSearch совпадает с именем $_sName искомого, то ...
        Switch $_sFileName
            Case $_sName

                ConsoleWrite('Found: ' & $_sFileName & '.' & $_sFileType & @LF)
                If FileExists($aListFileSearch[$_iA]) Then
                  _FileCopy($aListFileSearch[$_iA])
                 Else
                     Local $sFilePath = '"' & $sDrive & FileGetShortName($sFolder) & '\' & $sFileName & '_error.log' & '"'
                     Local $hFileOpen = FileOpen($sFilePath, $FO_APPEND)
                     FileWrite($hFileOpen, $_sFileName & '.' & $_sFileType & " Can't be found")
                 EndIf
                Return 1
            Case Else
                ;ConsoleWrite('Not found: ' & $_sName & '.' & $_sFileType & @LF)
                 Local $sFilePath = '"' & $sDrive & FileGetShortName($sFolder) & '\' & $sFileName & '_error.log' & '"'
                 Local $hFileOpen = FileOpen($sFilePath, $FO_APPEND)
                 FileWrite($hFileOpen, $_sName & '.' & $_sFileType & " Can't be found" & @CRLF)
        EndSwitch
    Next
FileClose($hFileOpen)
EndFunc

проблема теперь такая:
если $_sName не найден в строчке из $aListFileSearch, то информация каждый такой раз записывается в лог. т.е если у меня 4500 строк в $aListFileSearch, то кода 4500 запишет в лог, что $_sName не найден, а мне нужно только 1 раз
Сообщение автоматически объединено:

помогли с решением. Обновил код:
Код:
Func _FileSearch($_sName)
    Local $_iA, $_sFile
    Local $_sFileDir, $_sFileName, $_sFileType
    Local $_FOUND = False

    For $_iA = 1 To $aListFileSearch[0]
        ;получаем путь к файлу
        $_sFileDir = StringRegExpReplace($aListFileSearch[$_iA], '(^.*)\\(.*)$', '$1')
        ;получаем имя и тип файла
        $_sFileName = StringRegExpReplace($aListFileSearch[$_iA], '(^.*)\\(.*)$', '$2')
        ;получаем только тип файла
        $_sFileType = StringRegExpReplace($_sFileName, '(^.*)\.(.*)$', '$2')
        ;получаем только имя файла
        $_sFileName = StringRegExpReplace($_sFileName, '(^.*)\.(.*)$', '$1')

        ;если имя файла из списка $aListFileSearch совпадает с именем $_sName искомого, то ...
        Switch $_sFileName
            Case $_sName
                $_FOUND = True

                ConsoleWrite('Found: ' & $_sFileName & '.' & $_sFileType & @LF)
                If FileExists($aListFileSearch[$_iA]) Then
                  _FileCopy($aListFileSearch[$_iA])
                 Else
                     Local $sFilePath = '"' & $sDrive & FileGetShortName($sFolder) & '\' & $sFileName & '_error.log' & '"'
                     Local $hFileOpen = FileOpen($sFilePath, $FO_APPEND)
                     FileWrite($hFileOpen, $_sFileName & '.' & $_sFileType & " Can't be found")
                 EndIf
                ExitLoop
            Case Else
                ; Not found
        EndSwitch
    Next
    If Not $_FOUND Then
        ; ConsoleWrite('Not found: ' & $_sName & '.' & $_sFileType & @LF)
        Local $sFilePath = $sDrive & FileGetShortName($sFolder) & '\' & $sFileName & '_error.log'
        Local $hFileOpen = FileOpen($sFilePath, $FO_APPEND)
        FileWrite($hFileOpen, $_sName & '.' & $_sFileType & " Can't be found" & @CRLF)
        FileClose($hFileOpen)
     EndIf
EndFunc
 
Последнее редактирование:
Верх