Rexx - Parsowanie
Jedną z najpotężniejszych funkcji Rexx jest jego zdolność do analizowania wartości tekstowych. Prawdopodobnie nie zobaczysz tego w żadnym innym języku programowania.
Ogólny format instrukcji parsowania jest następujący -
Składnia
PARSE {UPPER|LOWER|CASELESS} source {template}
Where,
UPPER - Źródło jest konwertowane na wielkie litery przed analizą.
LOWER - Źródło jest konwertowane na małe litery przed analizą.
CASELESS - Po przekazaniu tego parametru wielkość liter jest ignorowana.
source- To jest źródło, które należy przeanalizować. Dostępnych jest wiele opcji i może to być jedna z następujących -
ARG - Jako źródło można użyć argumentów programu lub procedury.
LINEIN - Jako źródło można użyć następnego wejścia liniowego.
SOURCE - Informacje o źródle programu mogą służyć jako źródło.
VAR name - Jako źródło można użyć wartości nazwy zmiennej.
template- Ten parametr określa sposób analizowania źródła. Dostępnych jest wiele opcji. Niektóre z nich są wymienione poniżej.
variable name - To jest wartość przypisana do zmiennej.
literal string - Dosłowny ciąg, który może być użyty jako wzorzec do podzielenia strung.
#- Bezwzględna pozycja znaku w samym źródle. Więc jeśli określisz wartość 5, zostanie użyty piąty znak.
+#- Względna pozycja znaku w samym źródle. Jeśli więc określisz wartość 5, piąty znak zostanie użyty względnie.
Spójrzmy na prosty przykład tego, jak można przeprowadzić analizę w Rexx.
Przykład
/* Main program */
parse value 'This is a Tutorial' with word1 word2 word3 word4
say "'"word1"'"
say "'"word2"'"
say "'"word3"'"
say "'"word4"'"
Powyższy program analizuje słowa w wyrażeniu. Jeśli wartość składa się ze słów oddzielonych tylko jedną spacją i nie ma spacji wiodących ani końcowych, można ją łatwo przeanalizować na znaną liczbę słów w następujący sposób.
Funkcja parsowania jest używana w Rexx do pobierania wartości ciągu, a następnie dzielenia ich na słowa. W powyższym przykładzie słowa są następnie dzielone, a następnie zapisywane w słowach zmiennych.
Wynik powyższego programu byłby następujący -
'This'
'is'
'a'
'Tutorial'
Kolejny przykład parsowania jest pokazany w poniższym programie. Tym razem do parsowania używamy klauzuli while.
Przykład
/* Main program */
phrase = 'This is a Tutorial'
do while phrase <> ''
parse var phrase word phrase
say "'"word"'"
end
Powyższy program da następujący wynik -
'This'
'is'
'a'
'Tutorial'
Analiza pozycyjna
Rexx pozwala także pracować z analizowaniem pozycyjnym. Zobaczmy przykład, w jaki sposób możemy osiągnąć parsowanie pozycyjne za pomocą instrukcji parse.
Przykład
/* Main program */
testString = "Doe John M. 03/03/78 Mumbai India";
parse var testString name1 11 name2 21 birthday 31 town 51 country
say name1
say name2
say birthday
say town
say country
Z powyższego przykładu można zauważyć, że wraz z nazwą zmiennej określamy również, gdzie łańcuch powinien się kończyć. Tak więc dla name1 powinniśmy zakończyć 11. znakiem, a następnie rozpocząć analizę składniową nazwa2.
Wynik powyższego programu będzie następujący -
Doe
John M.
03/03/78
Mumbai
India
Możesz także użyć relative positional parsing w tym przypadku.
Przykład
/* Main program */
testString = "Doe John M. 03/03/78 Mumbai India";
parse var testString name1 +10 name2 +10 birthday +10 town +20 country
say name1
say name2
say birthday
say town
say country
Wynik powyższego programu będzie taki, jak pokazano poniżej.
Doe
John M.
03/03/78
Mumbai
India