Operacje na łańcuchach znaków są jednym z podstawowych elementów każdego języka programowania. Ze względu na powszechność ich wykorzystywania, często poznaje się je już na samym początku nauki danego języka. Niniejszy artykuł ma na celu przybliżenie podstawowych operacji na zmiennych tekstowych występujących w języku ABAP.

 

1. Pobieranie określonych znaków ze zmiennej tekstowej

 

W języku ABAP możliwe jest pobieranie określonej liczby znaków ze zmiennej tekstowej. Służy do tego następująca konstrukcja, gdzie ZMIENNA to nazwa zmiennej tekstowej, zaś n to liczba znaków, które mają zostać pobrane:

 

zmienna(n)

 

Powyższa konstrukcja pobierze n znaków począwszy od pierwszego znaku zmiennej. Możliwe jest także pobranie n znaków począwszy od określonego znaku. Przykładowo, poniższa konstrukcja pobierze ze zmiennej ZMIENNA n znaków, poczynając od i-tego znaku.

 

zmienna+i(n)

 

W przypadku zastosowania konstrukcji zmienna+i, pobrane zostaną wszystkie znaki danej zmiennej od i-tego znaku począwszy.

 

2. Sprawdzanie długości zmiennej tekstowej

 

Do sprawdzania długości zmiennej tekstowej służy funkcja STRLEN. Poniższy kod przedstawia jej zastosowanie praktyczne – do zmiennej length przypisuje ilość znaków w tekście przypisanym do zmiennej tekst (w testowym przypadku – 8).

 

DATA: length TYPE i, tekst TYPE c LENGTH 20.

tekst = ‘przykład’.

length = STRLEN( tekst ).

 

3. Łączenie zmiennych tekstowych

 

 

Do łączenia ze sobą dwóch lub więcej zmiennych tekstowych służy funkcja CONCATENATE. Poniżej został przedstawiony przykład jej wykorzystania – treść zmiennej tekst3 stanowi połączenie treści zmiennych tekst1 i tekst2. Wartość zmiennych tekst1 i tekst2 pozostaje niezmieniona.

 

DATA: tekst1 TYPE c LENGTH 5 VALUE ‘Ala’.

DATA: tekst2 TYPE c LENGTH 10 VALUE ‘ma kota.’.

DATA: tekst3 TYPE c LENGTH 20.

CONCATENATE tekst1 tekst2 INTO tekst3.

 

Należy zauważyć, że ponieważ nie został wyszczególniony żaden separator, wartość zmiennej tekst3 po przedstawionej wyżej operacji będzie wynosić „Alama kota.”. Możliwe jest określenie separatora, który będzie oddzielał od siebie łączone zmienne. Separator określany jest przy użyciu słowa kluczowego SEPARATED BY. Przykładowo, kod„CONCATENATE tekst1 tekst2 INTO tekst3 SEPARATED BY space.”spowoduje, że dla omawianego przypadku wartość zmiennej tekst3 będzie równa ‘Ala ma kota”, zaś kod „CONCATENATE tekst1 tekst2 INTO tekst3 SEPARATED BY ‘odstęp’.” sprawi że będzie ona wynosić „Alaodstępma kota.”

Należy pamiętać, że jeżeli dwie zmienne (lub więcej) zostaną połączone w jedną, zaś łączna długość zapisanych w nich tekstów przekroczy zdefiniowaną długość dla zmiennej w której zostaną połączone, nie pojawi się komunikat o błędzie. Zamiast tego, nadmiarowe znaki zostaną po prostu usunięte. Dla przykładu, po wywołaniu poniższego kodu, treść zmiennej tekst3 będzie wynosić „Ala m”.

 

DATA: tekst1 TYPE c LENGTH 5 VALUE ‘Ala’.

DATA: tekst2 TYPE c LENGTH 10 VALUE ‘ma kota.’.

DATA: tekst3 TYPE c LENGTH 5.

CONCATENATE tekst1 tekst2 INTO tekst3 SEPARATED BY space.

 

4. Rozdzielanie zmiennych tekstowych

 

Do rozdzielania jednej zmiennej tekstowej na dwie lub więcej zmiennych służy funkcja SPLIT. W odróżnieniu od funkcji CONCATENATE, obowiązkowe jest podanie separatora (po słowie kluczowym AT), po którym zmienna ma zostać podzielona. Poniżej przedstawiono przykład zastosowania funkcji SPLIT – treść zmiennej TEKST1 zostaje rozdzielona po spacjach  na zmienne TEKST2, TEKST3 oraz TEKST4.

 

DATA: tekst1 TYPE c LENGTH 20 VALUE ‘Ala ma kota.’.

DATA: tekst2 TYPE c LENGTH 10.

DATA: tekst3 TYPE c LENGTH 10.

DATA: tekst4 TYPE c LENGTH 10.

DATA: tekst5 TYPE c LENGTH 10.

SPLIT tekst1 AT space INTO tekst2 tekst3 tekst4.

 

Po tak zastosowanym kodzie, wartość zmiennych tekst2, tekst3 oraz tekst4 będzie wynosić odpowiednio „Ala”, „ma”, „kota.”. Gdyby funkcja SPLIT została uruchomiona z separatorem „a” (SPLIT tekst1 AT ‘a’ INTO tekst2 tekst3 tekst4 tekst5.),wartość zmiennych wynosiłaby odpowiednio „Al”, „ m”, „ kot”, „.”.

 

Jeżeli po słowie INTO zostanie wyszczególnionych zbyt mało zmiennych w ostatniej z nich znajdzie się pozostała część tekstu, która może zawierać w sobie separatory. Przykładowo, kod „SPLIT tekst1 AT space INTO tekst2 tekst3.” sprawi, że zmienne tekst2 i tekst3 będą wynosiły odpowiednio „Ala” oraz „ma kota.”.

 

5. Funkcje typu „znajdź i zamień”

 

W języku ABAP istnieją dwa rodzaje funkcji typu znajdź i zamień. Pierwszą z nich jest funkcja TRANSLATE. Funkcja ta pozwala zamienić wszystkie wystąpienia danego znaku w zmiennej na inny, określony znak. Przykładowo, poniższy kod zamieni w zmiennej TEKST wszystkie wystąpienia znaku „a” na znak „b”.

 

TRANSLATE tekst USING ‘ab’.

 

Poniższy kod z kolei, zamieni w zmiennej TEKST wszystkie wystąpienia znaku „a” na znak „b”, a także wszystkie wystąpienia znaku „z” na znak „y”.

 

TRANSLATE tekst USING ‘abzy’.

 

Ze względu na bardzo ograniczone możliwości funkcji TRANSLATE, znacznie częściej używana jest funkcja REPLACE. Pozwala ona zamieniać nie tylko pojedyncze znaki, ale całe ich łańcuchy. Dla przykładu, poniższy kod zamieni wszystkie znalezione w zmiennej TEKST ciągi znaków „ma” na ciągi „posiada”.

 

DATA: tekst TYPE c LENGTH 30 VALUE ‘Ala ma kota, ma również psa.’.

REPLACE ALL OCCURENCIES OF ‘ma’ IN tekst WITH ‘posiada’.

 

Po takiej operacji, wartość zmiennej TEKST będzie wynosić „Ala posiada kota, posiada również psa”.

Jeżeli funkcja REPLACE wywoływana jest bez opcji ALL OCCURENCIES OF, tyko pierwsze wystąpienie danego podciągu zostanie podmienione. Dla przykładu, po wywołaniu poniższego kodu, wartość zmiennej TEKST będzie równa „Ala posiada kota, ma również psa.”.

 

DATA: tekst TYPE c LENGTH 30 VALUE ‘Ala ma kota, ma również psa.’.

REPLACE ALL OCCURENCIES OF ‘ma’ IN tekst WITH ‘posiada’.

 

6. Usuwanie białych znaków

 

Do usuwania białych znaków służy funkcja CONDENSE. Poniższy kod usuwa wszystkie białe znaki znajdujące się na początku zmiennej TEKST (o ile takie istnieją), a wszystkie ciągi dwóch lub więcej białych znaków znajdujące się w dalszej części tekstu zastępuje pojedynczymi spacjami.

 

CONDENSE tekst.

 

Dla przykładu, jeżeli przed wykonaniem tej linii kodu, wartość zmiennej tekst wynosiła „    przykładowy   tekst”, po jej wykonaniu będzie to „przykładowy tekst”. Aby usunąć wszystkie białe znaki z dokumentu, należy użyć opcji NO-GAPS.

 

CONDENSE tekst NO-GAPS.

 

Po wykonaniu powyższej linii kodu, wartość zmiennej tekst będzie wynosić „przykładowytekst”.

 

7. Porównywanie łańcuchów znaków

 

Funkcja SEARCH pozwala sprawdzić, czy w danej zmiennej tekstowej zawarty jest wskazany podciąg. Dla przykładu, poniższa linia kodu sprawdzi, czy w zmiennej TEKST zawarty jest ciąg znaków „przykład”.

 

SEARCH zmienna FOR ‘przykład’.

 

Jeżeli w zmiennej zostanie odnaleziony dany ciąg znaków, wartość zmiennej systemowej sy-subrc będzie równa zero, zaś wartość zmiennej sy-fdpos wskaże pozycję, w której dany podciąg się znajduje.

 

Ponadto, w języku ABAP istnieje szereg operatorów logicznych, służących do porównywania tekstów;

 

  1. warunek „tekst1 CO tekst2” będzie prawdziwy tylko, jeżeli w zmiennej tekst1 będą zawarte tylko i wyłącznie znaki zawarte w  zmiennej tekst2. CO należy rozumieć jako „Contains only”.
  2. warunek „tekst1 CN tekst2” będzie prawdziwy tylko, jeżeli w zmiennej tekst1 będzie zawarty co najmniej jeden znak, który nie jest zawarty w zmiennej tekst2. CN należy rozumieć jako „Contains not only”.
  3. warunek „tekst1 CA tekst2” będzie prawdziwy tylko, jeżeli w zmiennej tekst1 będzie zawarty co najmniej jeden znak zawarty także w zmiennej tekst2. CA należy rozumieć jako „Contains any”.
  4. warunek „tekst1 NA tekst2” będzie prawdziwy tylko, jeżeli w zmiennej tekst1 nie będzie zawarty ani jeden znak zawarty w zmiennej tekst2. NA należy rozumieć jako zaprzeczenie CA.
  5. warunek „tekst1 CS tekst2” będzie prawdziwy tylko, jeżeli w zmiennej tekst1 będzie zawarty ciąg znaków tekst2. CS należy rozumieć jako „Contains string”.
  6. warunek „tekst1 NS tekst2” będzie prawdziwy tylko, jeżeli w zmiennej tekst1 będzie zawarty ciąg znaków tekst2. NS należy rozumieć jako zaprzeczenie CS.
  7. warunek „tekst1 CP tekst2” będzie prawdziwy tylko, jeżeli zmienna tekst1 będzie zgodna ze wzorem zawartym w zmiennej tekst2. CP należy rozumieć jako „Contains pattern”.
  8. warunek „tekst1 NP tekst2” będzie prawdziwy tylko, jeżeli zmienna tekst1 nie będzie zgodna ze worem zawartym w zmiennej tekst2. NP należy rozumieć jako zaprzeczenie NP.

 

PODSUMOWANIE

 

Powyższy artykuł stanowi wstęp do funkcji umożliwiających w języku ABAP przeprowadzanie operacji na zmiennych tekstowych. Przykładowo, funkcje takie jak OVERLAY, SHIFT czy CONVERT zostały pominięte, ze względu na to, że ich zastosowanie w praktyce jest bardzo rzadkie. Jednakże opanowanie funkcji, które zostały opisane w niniejszym tekście, może bardzo ułatwić pracę początkującego programisty.