ABAP 7. diel – Práca s textovými reťazcami

Slová sú v princípe reťazce, ale čísla a data môžu byť tiež textové reťazce. Záleží na tom ako ich chcete použiť.

Z tohoto dôvodu si v tejto kapitole ukážeme ako textové reťazce použiť a zobraziť.

Základné príkazy:

V predchádzajúcich kapitolách sme sa naučili ako napríklad vynásobiť telefónne čísla. Pravdepodobne budete súhlasiť že aritmetické operácie sa k tomuto typu textových reťazcov príliš nehodia. Jednoduchšie by bolo pripočítať lokálne telefónne číslo s medzinárodným predčíslím. K tomu však potrebuje poznať základné príkazy pre operácie s textovými reťazcami, a to sa práve naučíme v tejto kapitole.

Deklarácia textových polí

V jazyku ABAP existujú dva základne dátové typy pre textové reťazce:

– Dátový typ c pre znakové pole
– Dátový typ n pre číselné pole

Typ c sa používa pre alfanumerické znaky, rozsah pola je 1 až 65536 znakov. Defaultná hodnota je medzera. Znakové pole tak ako každé iné musíte najprv
deklarovať. Pole GENDER s dĺžkou jedného znaku môžete deklarovať pomocou príkazu DATA nasledovne:

DATA gender(1) TYPE c.

Skrátený zápis:

DATA gender.

Poznámka: Pokiaľ nešpecifikujete dátový typ, systém automaticky doplní dátový typ c; to isté platí aj o dĺžke polia – pokiaľ ho nešpecifikujete tak
systém nastaví automaticky defaultnú dĺžku pola 1.

Pokiaľ chcete deklarovať pole LAST_NAME s dátovým typom c, a dĺžka pola 20 znakov tak môžete jednoducho použiť nasledovný príkaz.

DATA last_name(20).

TYP n – Polia s dátovým typom n majú zvláštne využitie. Pretože sa skladajú z textových reťazcov tak musia obsahovať len číselné znaky. Voľné znaky
sú doplňované z ľava nulami. Vždy keď budete chcieť použiť čísla a nebudete mať v úmysle prevádzať aritmetické operácie tak použite dátový typ n.
Rozsah pola je 1 až 65536 znakov. Defaultná hodnota je 0.

Ďalšie dodatky k príkazu DATA, fungujú rovnako aj pri oboch dátových typoch (“c” a “n”).

LIKE – deklaruje dátové pole rovnako ako DATA
DATA last_name LIKE zmember01-name.

VALUE – Priraďuje hodnotu k priradenému polu.
DATA gender VALUE ´M´.

Poznámka: Defaultná hodnota je napísaná ako literál. Z hľadiska možností budúcich dotazov je dôležité dodržiavať malé a veľké písmena, pretože
“m” a hodnota “M” nie je to isté.

Operácie s textovými reťazcami

Medzi bežné operácie patrí hľadanie skupiny znakov v reťazci, nahradzovanie znakov, posun znakov doľava a doprava, doplnenie reťazca o znaky atď.

Poznámka: Pozrite sa na jednoduchý príklad. Pokiaľ chcete deklarovať telefónne číslo ako číselný textový reťazec s 9 znakmi a defaultnú hodnotu by mal
“887766” tak to bude vyzerať takto:

DATA phone(9) TYPE n VALUE ´887766´

Zatiaľ je všetko jasné. Obsadili sme 6 miest a 3 miesta ostali voľné, pre prípad že by ste chceli spracovať dlhšie telefónne číslo. Vyzerá to tak že ste
urobili všetko správne. Ale hodnotu 9 miestneho číselného reťazca je deväť nul (000000000). A vaša defaultná hodnota “887766” prepíše len šesť núl z prava, takže hodnota poľa v skutočnosti bude ´000887766´. Pokiaľ by ste chceli vytočiť nasledujúce číslo tak neuspejete, musíte nejako odstrániť počiatočné nuly z textového reťazca.

Posun textových reťazcov

Jedným spôsobom je posúvať textový reťazec do ľava, pokiaľ počiatočné nuly nezmiznú. Toto sa dá prostredníctvom príkazu SHIFT.

SHIFT phone LEFT DELETING LEADING ´0´.

Tento príkaz posúva reťazec od ľava, výsledok bude teda “887766 “. Textový reťazec môžete samozrejme posunúť ľubovoľným smerom o zadaný počet miest. Pokiaľ napríklad chcete posunúť telefónne číslo o 3 miesta do prava, použijete príkaz:

SHIFT phone BY 3 PLACES RIGHT

Nahradenie znakov

REPLACE ´ ´ WITH area_code
INTO phone_internationak.

Príkaz: REPLACE, vyhľadá a nahradí prvý výskyt vyhľadaného reťazca. V tomto prípade dve medzery.

Zhusťovanie textových reťazcov

Odstraňovanie nadbytočných medzier. Textové polia často obsahujú medzery, ktoré sú zbytočné. Tieto medzery často vznikajú operáciami s reťazcami. Prvá možnosť predpokladá že pole PHONE_INTERNATIONAL obsahuje hodnotu “+41 -(0)9876 887766”. Celkovo tento textový reťazec obsahuje tri medzery (označené červeným).

Príkaz CONDENSE Vám vie spojiť hore spomenuté tri časti polia reťazca tak, že zostane iba jedna medzera mezdzi častiami reťazca -> “+41 -(0)9876 887766”.

CONDENSE phone_international

Pokiaľ si myslíte že by tam nemali byť žiadne medzery, tak na to slúži dodatok NO-GAPS.

CONDENSE phone_international NO-GAPS.

Po dokončený bude mať pole hodnotu: “+41-(0)9876887766”.

Spojenie textových polí

Predstavte si že na jeden riadok chcete vypísať dve (alebo viac..) polia napríklad NAME a FIRST_NAME pole sú typu c a majú dĺžku 40 znakov. To znamená že výsledok bude mať 80 znakov a bude obsahovať medzery. Bolo by užitočné aby výsledok bol ako samostatné pole a obsahoval len jednu medzeru medzi textovými reťazcami.

CONCATENATE international_area_code
area_code phone
INTO
phone_international.

Výsledok bude “+4109876887766” (+41 plus 09876 plus 887766)

Existuje ešte dodatok SEPARATED BY – čo vloží medzi spájané reťazce premennú / literál napr. ´ – ´.

CONCATENATE international_area_code
area_code phone
INTO
phone_international
SEPARATED BY ´-´.

Výsledok bude “+41-09876-887766”.

Rozdelenie textových reťazcov

Rozdelenie veľkého textového reťazca na viac častí/polí.

SPLIT phone_international AT ´-´
INTO
international_area_code area_code phone.

Príkaz AT rozdelí obsah pole PHONE_INTERNATIONAL v mieste oddeľovača (literál alebo premena). Okrem toho sa musíme presvedčiť či sú cieľové polia dostatočné veľké, aby jednotlivé časti reťazca uložila.

Ak bude pole PHONE_INTERNATIONAL pred spustením obsahovať hodnotu “+41-09876-887766”, tak výsledok bude “+41” a “09876” a “887766”.

Operácie s reťazcami s priamym umiestnením

Niekedy chcete pridať na dané miesto v reťazci alebo naopak odstrániť určitý počet znakov od pozície v reťazci. Predpokladá sa že pole PHONE_INTERNATIONAL obsahuje reťazec “+41-(0)9876-887766” a Vy viete že obsahuje medzinárodný kód oblasti a je vždy umiestnený na prvých 3 miestách.

Príkaz international_are_code = phone_international(3). uloží obsah od pozície 0 do pozície. Dĺžka sa špecifikuje v zátvorkách (3).

Od stredu – často sa hľadaný reťazec nachádza niekde v strede. Predchádzajúca metóda vyžaduje vedieť defaultnú pozíciu dĺžku podreťazca. Pokiaľ chcete len zameniť

“+41” na “+33” tak k tomuto slúži príkaz:

phone_international+1(2) = ´33´.

Poznámka: Typ C verzus typ n
Pokiaľ použijete dátový typ C systém príma všetky alfanumerické znaky, vrátane špecializovaných znakov. Keď sa celý reťazec skladá len z číslic tak je lepšie použiť dátový typ N.

Ukážkový kód pre operácie s reťazcami

Výpis 5.1. Report Z_STRING_OPERATIONS

zdroj: TS FMG.sk

Loading Facebook Comments ...