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 znakowych Operator Opis Prawda gdy Wielkość liter Końcowe spacje z1 CO z2 contains only z1 składa się tylko ze znaków zawartych w z2 z1 CN z2 NOT z1 CO z2 z1 składa się ze znaków innych niż zawarte w z2 z1 CA z2 contains any z1 zawiera dowolny znak z z2 z1 NA z2 NOT z1 CA z2 z1 nie zawiera żadnego znaku z z2 ma znaczenie ma znaczenie ma znaczenie ma znaczenie ważne ważne ważne 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 z1 NP z2 NOT z1 CP z2 z1 nie zawiera podciągu pasującego do wzorca z2 bez znaczenia bez znaczenia Symbole wzorca: * dowolny ciąg znaków + dowolny znak # następny znak jest interpretowany jest dosłownie (dla znaków *, +, #, wielkości liter itp.) pomijane pomijane
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 z1 CA z2 offset pierwszego znaku należącego do z1, który występuje w z2 offset pierwszego znaku należącego do z1, który występuje w z2 długość z1 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.