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