środa, 10 lipca 2013

Testowanie zgodności ciągów tekstowych- podstawy- 2/2

Kontynuując tematykę pracy z tekstem i szukania odpowiedzi na pytanie 'czy tekst B spełnia określone kryteria zgodności z tekstem A?' zaprezentuje technikę opartą o wykorzystanie operatora Like.

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?
1Debug.Print A Like "*sit*"                  'wynik TRUE
2Debug.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:
1Debug.Print UCase(A) Like UCase("*Sit*")    'wynik TRUE

2. Czy tekst A zaczyna się od małej litery?
1Debug.Print A Like "[a-z]*"                 'wynik FALSE

3. A może tekst zaczyna się od dowolnej litery (nie cyfry, nie znaku specjalnego)?
1Debug.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):
1Debug.Print Chr(65)     '>> A
2Debug.Print Chr(66)     '>> B
3Debug.Print Chr(90)     '>> Z
4Debug.Print Chr(91)     '>> [
5Debug.Print Chr(96)     '>> `
6Debug.Print Chr(97)     '>> a
7Debug.Print Chr(98)     '>> b
8Debug.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ę?
1Debug.Print A Like "*[0-9A-Za-z]"           'wynik FALSE

5. A może tekst kończy się wybranym znakiem specjalnym?
1Debug.Print A Like "*[.?!;]"                'wynik TRUE

6. Sprawdźmy czy tekst zawiera liczbę trzy- lub cztero-cyfrową?
1Debug.Print A Like "*###*"                  'wynik TRUE
2Debug.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?
1Debug.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:
2Debug.Print A Like "*[!*]*"
3'b) nie kończy się wykrzyknikiem:
4Debug.Print A Like "*[!!]" 
5'c) zawiera przynajmniej jedną cyfrę:
6Debug.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