Функция _FO_CorrectMask

         Описание функции


_FO_CorrectMask

Возвращает корректную маску для поиска файлов или папок.

#Include <FileOperations.au3>
_FO_CorrectMask ( $sMask )

Параметры

$sMask Маска, которая может содержать кроме допустимых символов в именах файлов ещё и символы подстановки "*" и "?" и разделитель "|"

Возвращаемое значение

Успех:Возвращает строку корректной маски
Ошибка:Возвращает символ "|" и @error=2

Примечания

Функция исправляет возможные ошибки ввода пользователем:
1. Удаляются повтор элементов маски. Например *.avi|*.mpg|*.avi оставит *.avi|*.mpg (влияет только на скорость регулярного выражения)
2. Маска такого вида *|*.avi или *|*NameFolder обработает как * - найти все, по наибольшему захвату.
3. Пустая строка маски тоже что и * - поиск всех файлов
4. Повторы пробелов и точек в конце каждого элемента маски удаляются, то есть *.avi .|*.mpg |*.vob. преобразуется в *.avi|*.mpg|*.vob, так как имя файла/папки не может заканчиваться этими символами.
5. Символы * - любое множество или отсутствие символов, ? - любой одиночный символ. При чём поиск не аналогичен поиску в эксплорере, где изначально маска задана так: *mask*, то есть любое имя содержащее mask

См. также

_FO_FileSearch, _FO_FolderSearch

Пример

; AZJIO
; http://www.autoitscript.com/forum/topic/133224-filesearch-foldersearch/
#include <Array.au3> ; для _ArrayDisplay
#include <FileOperations.au3>

; Обработка ошибок
;=======================================
; все папки в папке WINDOWS в виде массива
$timer = TimerInit()
$FolderList = _FO_FileSearch(@SystemDir, _FO_CorrectMask('|*.log|*.txt   ..|*.avi..  |||*.log|*.bmp|*.log'))
$timer = Round(TimerDiff($timer) / 1000, 2) & ' сек'
_ArrayDisplay($FolderList, $timer & ' - с коррекцией')
;=======================================
$FolderList = _FO_FileSearch(@SystemDir, _FO_CorrectMask('||||'))
If @error Then MsgBox(0, 'Сообщение', '@error=' & @error)
;=======================================

MsgBox(0, '|*.log|*.txt   ..|*.avi..  |||*.log|*.bmp|*.log', _FO_CorrectMask('|*.log|*.txt   ..|*.avi..  |||*.log|*.bmp|*.log'))
MsgBox(0, '*.avi..  |*|*.log', _FO_CorrectMask('*.avi..  |*|*.log'))

$e = _FO_CorrectMask('|..|  ..  | |')
If @error Then MsgBox(0, '|..|  ..  | |', $e & ' - @error=' & @error)