|
Данный пример позволяет определить, соответствует ли имя файла какой-либо маске. Очень часто вы используете специальные символы (к примеру при поиске файлов) - знак вопроса (?) или звездочку (*). Знак вопроса означает, что в данном месте может быть только один символ, а звездочка означает, что в данном месте может быть любое количество символов. В общем, посмотрите на прилагающийся пример, и вы сразу поймете в чем дело. Private Function IsMask(ByVal FileName As String, ByVal Mask As String) As Boolean
'объявляем переменные
Dim i As Integer
Dim pos As Integer
Dim posit As Integer
Dim curs As String
Dim tmp As Integer
Dim temp As String
Dim j As Integer
'Заменяем идущие подряд несколько звёздочек на
одну
pos = 1
posit = InStr(pos, Mask, "**")
Do While posit <> 0
temp = Left$(Mask, posit - 1)
temp = temp & Mid$(Mask, posit, 1)
temp = temp & Right$(Mask, Len(Mask) - (posit + 1))
Mask = temp
posit = InStr(pos, Mask, "**")
Loop
'Заменяем *? на *
pos = 1
posit = InStr(pos, Mask, "*?")
Do While posit <> 0
temp = Left$(Mask, posit - 1)
temp = temp & Mid$(Mask, posit, 1)
temp = temp & Right$(Mask, Len(Mask) - (posit + 1))
Mask = temp
posit = InStr(pos, Mask, "*?")
Loop
'Перебираем все символы в Mask
For pos = 1 To Len(Mask)
curs = Mid$(Mask, pos, 1)
Select Case curs
'если символ "?", то это любой знак
Case "?"
j = j + 1
i = i + 1
'если символ "*", то
Case "*"
If pos = Len(Mask) Then
'Если это последний символ, отпускаем с богом
i = i + (Len(FileName) - j)
'А если нет, то ищем символв FileName,
'стоящий в Mask за звездой
Else
tmp = InStr(pos, FileName, Mid$(Mask, pos + 1, 1))
'Если символ не найден, то
If tmp = 0 Then
'Значение функции = False
IsMask = False
'Выходим из функции
Exit Function
End If
'i = i + кол-во непроверенных символов
i = i + (tmp - (j + 1))
'то же самое с j
j = j + (tmp - (j + 1))
End If
'если символ не "*" и не "?", то
Case Else
j = j + 1
'если символ в FileName совпадает с символом
'в Mask, то
If Mid$(FileName, j, 1) = Mid$(Mask, pos, 1) Then
'Увеличиваем счётчик попаданий
i = i + 1
End If
End Select
'завершаем цикл
Next
'Если i соответствует длине FileName, то
'значение функции True, иначе False
If i = Len(FileName) Then IsMask = True Else IsMask = False
End Function
Private Sub Form_Load()
MsgBox IsMask("ritual.txt", "*.*"), , "ritual.txt" &
" *.*"
MsgBox IsMask("ritual.txt", "r*.*"), , "ritual.txt" &
" r*.*"
MsgBox IsMask("ritual.txt", "m*.*"), , "ritual.txt" &
" m*.*"
MsgBox IsMask("ritual.txt", "?i????.*"), , "ritual.txt"
& " ?i????.*"
MsgBox IsMask("ritual.txt", "*u??.*"), , "ritual.txt" &
" *u??.*"
MsgBox IsMask("ritual.txt", "*.htm"), , "ritual.txt" &
" *.htm"
MsgBox IsMask("ritual.txt", "*.txt"), , "ritual.txt" &
" *.txt"
End
End Sub
|
|