Ogólna konstrukcja wykorzystania operatora opiera się o schemat:
tekst_A Like wzorzec_B
gdzie w strukturze wzorca dostępne są następujące znaki i bloki specjalne
* dowolny ciąg tekstu lub ciąg pusty
? pojedynczy znak- litera lub cyfra
# pojedyncza cyfra 0 do 9
[zakres] wskazany zakres znaków, liter, cyfr
[!zakres] wskazany zakres znaków, liter, cyfr nie uwzględniany w wyszukiwaniu
Spójrzmy jednak na przykłady w celu zrozumienia zastosowania operatora Like.Tym razem naszym badanym tekstem będzie następujący ciąg:
A = "Lorem ipsum dolor 100 sit amet, consectetuer adipiscing elit."
1. Czy w tekście A znajduje się określony fragment tekstu?
1 | Debug.Print A Like "*sit*" 'wynik TRUE |
2 | Debug.Print A Like "*Sit*" 'wynik FALSE |
Proszę pamiętać, że domyślne porównanie tekstowe odbywa się w sposób binarny, a więc taki, który rozróżnia wielkość liter. Jednym ze sposobów obejścia tego problemu jest zastosowanie następującej techniki:
1 | Debug.Print UCase(A) Like UCase( "*Sit*" ) 'wynik TRUE |
2. Czy tekst A zaczyna się od małej litery?
1 | Debug.Print A Like "[a-z]*" 'wynik FALSE |
3. A może tekst zaczyna się od dowolnej litery (nie cyfry, nie znaku specjalnego)?
1 | Debug.Print A Like "[A-Za-z]*" 'wynik TRUE |
Uwaga, nie możemy zapisać zapytania jako "[A-z]" gdy pomiędzy literami A-Z i a-z znajduje się zestaw znaków specjalnych. Można to sprawdzić w następujący sposób (wraz z listą zwracanych wartości):
1 | Debug.Print Chr(65) '>> A |
2 | Debug.Print Chr(66) '>> B |
3 | Debug.Print Chr(90) '>> Z |
4 | Debug.Print Chr(91) '>> [ |
5 | Debug.Print Chr(96) '>> ` |
6 | Debug.Print Chr(97) '>> a |
7 | Debug.Print Chr(98) '>> b |
8 | Debug.Print Chr(122) '>> z |
Jak więc widać powyżej zakresy znaków ujęte w kwadratowych nawiasach [] odpowiadają znakom w kolejności zgodnej z numeracją ANSI.
4. Czy tekst kończy się na literę lub liczbę?
1 | Debug.Print A Like "*[0-9A-Za-z]" 'wynik FALSE |
5. A może tekst kończy się wybranym znakiem specjalnym?
1 | Debug.Print A Like "*[.?!;]" 'wynik TRUE |
6. Sprawdźmy czy tekst zawiera liczbę trzy- lub cztero-cyfrową?
1 | Debug.Print A Like "*###*" 'wynik TRUE |
2 | Debug.Print A Like "*####*" 'wynik FALSE |
7. Weryfikacja czy tekst jest zdaniem wymaga sprawdzenia, czy zaczyna się od litery wielkiej i kończy jednym ze znaków specjalnych?
1 | Debug.Print A Like "[A-Z]*[.?!]" 'wynik TRUE |
8. A na koniec kilka drobnych przykładów, które zwracają wartość TRUE dla analizowanego ciągu tekstowego:
1 | 'a)nie zawiera gwiazdki: |
2 | Debug.Print A Like "*[!*]*" |
3 | 'b) nie kończy się wykrzyknikiem: |
4 | Debug.Print A Like "*[!!]" |
5 | 'c) zawiera przynajmniej jedną cyfrę: |
6 | Debug.Print A Like "*[0-9]*" |
Wszystkich zainteresowanych szerzej zagadnieniem zastosowania opeartora Like odsyłam bezpośrednio do pomocy VBA na stronach Microsoft MSDN:
Like Operator
Comparing Strings by Using Comparison Operators
Brak komentarzy:
Prześlij komentarz