ABAP/4 - cs.put. · PDF filez poziomu Edytora ABAP opcja Utilities Program Analysis. Operatory...
Click here to load reader
Transcript of ABAP/4 - cs.put. · PDF filez poziomu Edytora ABAP opcja Utilities Program Analysis. Operatory...
ABAP/4
Instrukcja IF
Opis: Instrukcja warunkowa
Składnia:IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].
…
[ELSEIF warunek.
… ]
[ELSE.
… ]
ENDIF.
gdzie:
warunek – dowolne wyrażenie logiczne o wartości TRUE lub FALSE
… - dowolny fragment kodu
Instrukcja IF – właściwości
IF musi być zakończone przez ENDIF.
ELSE oraz ELSEIF są opcjonalne
Można stosować złożone warunki, w których o kolejności wartościowania decydują nawiasy
Klauzula IS INITIAL pozwala sprawdzić czy wartość zmiennej jest znakiem pustym (typ C) lub zerem (pozostałe typy) np. z1 IS INITIAL
Klauzula IS NULL pozwala sprawdzić czy zmiennej nie przypisano żadnej wartości
NOT musi poprzedzać warunek
ELSEIF – stosowana w celu uniknięcia zagnieżdżeń instrukcji IF
Operatory porównania
Operatory: = lub EQ
<> lub NE lub ><
> lub GT
< lub LT
>= lub GE lub =>
<= lub LE lub =<
z BETWEEN x AND y
NOT z BETWEEN z AND y
Operandy: zmienne
literały
łańcuchy pól – traktowane jak zmienna typu C
Konwersja danych przy porównaniach
Przy niezgodności typów przeprowadzana jest automatyczna konwersja według następującego algorytmu:1. Jeśli jedno pole jest typu F, to pozostałe są konwertowane do typu F
2. Jeśli jedno pole jest typu P, to pozostałe są konwertowane do typu P
3. Jeśli jedno pole jest typu I, to pozostałe są konwertowane do typu I
4. Jeśli jedno pole jest typu D, to pozostałe są konwertowane do typu D, o ile nie są typu C lub N
5. Jeśli jedno pole jest typu T, to pozostałe są konwertowane do typu T, on ile nie są typu C lub N
6. Jeśli jedno jest typu N, to wszystkie pola są konwertowane do typu P
7. Jeśli jedno jest typu C, to pozostałe pola typu X są konwertowane do typu C
Konwersje literałów: do typu I – liczby do 9 cyfr
do typu P – liczby dłuższe niż 9 cyfr
do typu C – pozostałe literały
Wyświetlanie miejsc występowania konwersji: z poziomu Edytora ABAP opcja Utilities Program Analysis
Operatory porównania łańcuchów
znakowychOperator Opis Prawda gdy … Wielkość liter Końcowe spacje
z1 CO z2 contains only z1 składa się tylko ze
znaków zawartych w z2
ma znaczenie ważne
z1 CN z2 NOT z1 CO z2 z1 składa się ze znaków
innych niż zawarte w z2
ma znaczenie ważne
z1 CA z2 contains any z1 zawiera dowolny znak z
z2
ma znaczenie ważne
z1 NA z2 NOT z1 CA z2 z1 nie zawiera żadnego
znaku z z2
ma znaczenie ważne
z1 CS z2 contains string z1 zawiera podciąg z2 bez znaczenia pomijane
z1 NS z2 NOT z1 CS z2 z1 nie zawiera podciągu z2 bez znaczenia pomijane
z1 CP z2 contains pattern z1 zawiera podciąg
pasujący do wzorca z2
bez znaczenia pomijane
z1 NP z2 NOT z1 CP z2 z1 nie zawiera podciągu
pasującego do wzorca z2
bez znaczenia pomijane
Symbole wzorca:
* dowolny ciąg znaków
+ dowolny znak
# następny znak jest interpretowany jest dosłownie
(dla znaków *, +, #, wielkości liter itp.)
Zmienna SY-FDPOS
Zmienna ustawiana w wyniku zastosowania operatorów porównania łańcuchów znakowych
Porównanie Wartość SY-FDPOS dla wyniku
TRUE
Wartość SY-FDPOS dla wyniku
FALSE
z1 CO z2 długość z1 offset pierwszego znaku należącego
do z1, który nie występuje w z2
z1 CN z2 offset pierwszego znaku należącego
do z1, który występuje w z2
długość z1
z1 CA z2 offset pierwszego znaku należącego
do z1, który występuje w z2
długość z1
z1 NA z2 długość z1 offset pierwszego znaku należącego
do z1 i występującego w z2
z1 CS z2 offset pierwszego znaku w z2, który
występuje w z1
długość z1
z1 NS z2 długość z1 offset pierwszego znaku należącego
do z1 i występującego w z2
z1 CP z2 offset pierwszego znaku w z2, który
występuje w z1
długość z1
Instrukcja CASE
Instrukcja wyboru
Składnia:CASE z1.
WHEN z2 [OR zn …].
…
WHEN z3 [OR zn …].
…
[ WHEN OTHERS.
… ]
ENDCASE.
gdzie:
z1, z2, z3, zn – zmienna, literał, stała, łańcuch pól
… - dowolny ciąg instrukcji (również pusta)
Instrukcja CASE – właściwości
Wykonywana jest tylko pierwsza instrukcja WHEN, dla której spełniony jest warunek
WHEN OTHERS oznacza warunek, który będzie spełniony jeśli nie będzie spełniony żaden z warunków WHEN
Jeśli nie wyspecyfikowano WHEN OTHERS a żaden z warunków WHEN nie jest spełniony, to sterowanie jest przekazywane do pierwszej instrukcji po ENDCASE
Niedopuszczalne są wyrażenia wymagające wartościowania
Łańcuchy pól traktowane są jak zmienna typu C
Porównuje się pojedyncze wartości w relacji równości
Instrukcja EXIT
Opis: przerwanie wykonywania bloku instrukcji i
przekazanie sterowania poza ten blok
Składnia:EXIT.
Działanie: wewnątrz pętli powoduje przerwanie
wykonywania tej pętli
w podprogramie powoduje wyjście z podprogramu
w programie głównym powoduje przerwanie wykonywania tego programu
Instrukcja DO
Opis: pętla
Składnia:DO [z1 TIMES] [VARYING f1 FROM s-c1 NEXT s-c2 [VARYING f2 FROM s2-c1 NEXT s2-c2 … ] ].
…
[EXIT.]
…
ENDDO.
gdzie:
z1 – zmienna, literał lub stała
s, s2 – łańcuch pól o składowych c1 i c2
f1 – zmienna (składowe łańcucha s muszą być konwertowalne do typu i rozmiaru f1)
Instrukcja DO – właściwości
Pętla DO może być wielokrotnie zagnieżdżona
EXIT powoduje natychmiastowe wyjście z pętli
DO bez warunku oznacza pętlę nieskończoną
Zmiana wartości v1 wewnątrz pętli nie ma wpływu na wykonywanie pętli
Zmienna SY-INDEX wewnątrz pętli zawiera numer bieżącej iteracji, po ENDDO ma wartość taką, jaką miała przed wejściem do pętli, w pętlach zagnieżdżonych zawiera numer iteracji bieżącej pętli
Zmiana wartości SY-INDEX wewnątrz pętli nie ma wpływu na jej wykonanie, przed następną iteracją zostanie przywrócona poprzednia wartość numeru iteracji
Klauzula VARYING
Opis: stosowana w celu dostępu do pól łańcucha w pewnym ciągu
NEXT określa odległość w bajtach do następnej składowej
Przykład:
REPORT zpba007.
DATA: f1,
BEGIN OF s,
c1 VALUE 'A',
c2 VALUE 'B',
c3 VALUE 'C',
c4 VALUE 'D',
c5 VALUE 'E',
c6 VALUE 'F',
END OF s.
WRITE / ''.
DO 6 TIMES VARYING f1 FROM s-c1 NEXT s-c2.
WRITE f1.
ENDDO.
WRITE / ''.
DO 3 TIMES VARYING f1 FROM s-c1 NEXT s-c3.
WRITE f1.
ENDDO.
Wynik:
A B C D E F
A C E
Klauzula VARYING - właściwości
NEXT – określa odległość w bajtach pomiędzy kolejnymi odczytami
Rozmiar f1 określa ile bajtów odczytać
Wszystkie składowe s odczytywane w ten sposób w pętli DO muszą być oddalone od siebie o taką samą liczbę bajtów
Nie przeprowadza się konwersji podczas przypisania do f1
Aby uniknąć odczytów danych spoza struktury s należy zapewnić wyjście z pętli DO w odpowiednim momencie (EXIT lub TIMES)
Wartość f1 jest ponownie zapisywana w strukturze s po osiągnięciu instrukcji ENDDO, bez względu na to, czy została ona wcześniej zmodyfikowana, czy też nie
Opuszczenie pętli instrukcją EXIT nie zabezpiecza przed działaniem powyższego mechanizmu
Aby uniknąć nadpisania składowej struktury wartością f1 można zastosować instrukcję STOP lub instrukcję wywołującą komunikat o błędzie.
Instrukcja WHILE
Opis: pętla wykonywana warunkowo
Składnia:WHILE warunek [VARY f1 FROM s-c1 NEXT s-c2 [VARY f2 FROM s-c1 NEXT s-c2 … ]
…
[EXIT.]
…
ENDWHILE.
gdzie:
warunek – jest warunkiem logicznym o wartości TRUE lub FALSE
s – łańcuch pól ze składowymi c1 i c2
f1 – zmienna (składowe ci muszą mieć typ i rozmiar umożliwiający konwersję do f1)
Instrukcja WHILE – właściwości
Może być zagnieżdżana wielokrotnie, także w innych typach pętli
Instrukcja EXIT powoduje natychmiastowe przerwanie pętli i przekazanie sterowania poza ENDWHILE
Zmienna SY-INDEX: wewnątrz pętli oznacza numer bieżącej iteracji
po ENDWHILE przyjmuje wartość, jaką miała przed wejściem do pętli
w pętlach zagnieżdżonych zawiera numer iteracji w bieżącej pętli
ENDWHILE – powoduje zapisanie wartości f1 z powrotem do odpowiedniej składowej łańcucha s
Jeżeli instrukcja WHILE zawiera klauzulę VARY, to najpierw sprawdzany jest warunek, a dopiero potem obliczane są wartości z klauzuli VARY
Instrukcja CONTINUE
Opis: stosowana w pętli służy do bezwarunkowego
przekazania sterowania na koniec pętli
Składnia:DO | WHILE | SELECT | LOOP
…
CONTINUE.
…
ENDDO | ENDWHILE | ENDSELECT | ENDLOOP
Właściwości: może być użyta tylko w pętli
nie ma żadnych klauzul
Instrukcja CHECK
Opis: instrukcja używana wewnątrz pętli powodująca
warunkowe przerwanie bieżącej iteracji (gdy warunek nie jest spełniony)
Składnia:DO | WHILE | SELECT | LOOP
…
CHECK warunek.
…
ENDDO | ENDWHILE | ENDSELECT | ENDLOOP
gdzie:
warunek oznacza warunek logiczny o wartości TRUE lub FALSE
EXIT, CONTINUE, CHECK - podsumowanie
EXIT – opuszczenie pętli
CONTINUE – bezwarunkowy skok na koniec pętli
CHECK warunek – warunkowy skok na koniec pętli o ile warunek nie jest spełniony
Nie zaleca się stosowania instrukcji CONTINUE i CHECK w pętli SELECT ze względów wydajnościowych – w takim przypadku zaleca się odpowiednio zmodyfikować warunek w klauzuli WHERE
Określanie pozycji wydruku
Instrukcja:
WRITE [/][P][(L)] z1.
gdzie:
/ - oznacza przejście do nowej linii
P – oznacza pozycję w linii
L – oznacza liczbę bajtów (długość) przeznaczoną na odpowiedni wpis.
pomiędzy /, P oraz (L) nie powinno być spacji.