Sie sind auf Seite 1von 4

Deklaration von Datenobjekten

Mit den Datentypen haben wir auch schon ein wenig Datenobjekte eingeführt.
Datenobjekte können aber außer mit der Anweisung DATA auch mit den
Anweisungen PARAMETERS (Eingabe durch User), SELECT-OPTIONS
(Mehrfacheingabe durch User), und CONSTANTS(Konstante) deklariert werden.
Das ist auch wieder nur ein Ausschnitt dessen, was sonst noch geht. Insbesondere
neuere Sprachelemente eröffnen hier noch einige Möglichkeiten. Wir bleiben
klassisch. Die Konstante braucht zwingend einen Default-Wert, (Zusatz Value),
parameters und data können aber müssen keinen Default-Wert erhalten. Dieser
ist dann der typgerechte Defaultwert.

Manipulation von Datenobjekten


Nun beginnen wir ernsthaft mit der Programmierung. Eine oft benutzte Methode,
sich eine Programmiersprache anzueignen besteht darin, dass man einmal schaut,
mit welchen Typen man es zu tun hat, und wie man mit ihnen arbeiten kann.
Dann schaut man sich die Kontrollstrukturen an und schließlich die Organisation
von Code und Möglichkeiten der Wiederverwendbarkeit von Code. Wir werden
uns in etwa an den Fahrplan halten. Allerdings sind Strukturen und interne
Tabellen etwas anspruchsvoller, die schieben wir nach hinten, wenn Sie schon
etwas vertrauter mit allem sind.

Manipulation von zeichenartigen Datentypen


Zeichenartige Datentypen sind beispielsweise C,String, N, D,T. Zumindest kom-
men wir mit diesen erstmal gut aus.
Es ist im Grunde genommen recht einfach: Gehen Sie im Menü der ABAP-Docu
in den Teilbaum "Interne Daten verarbeiten" ->Anweisungen für die Byte- und
Zeichenkettenverarbeitung Dort finden Sie

1
diese Übersicht, von der Sie in die jeweils benötigte Anweisung navigieren und
sich die Beispiele anschauen.
Nützlich sind auch die Operatoren und Vergleichsoperatoren.

Beispielprogramme aus der Doku


Leider ist es nicht ganz so einfach, da in der Doku ein sehr moderner Program-
mierstil genutzt wird, der in der Vorlesung so nicht gelehrt wird
Wir nehmen einmal das Beispiel aus der Anweisung REPLACE
DATA(str) = Hallo. REPLACE a IN str WITH e. cl_demo_output=>display(
str ).
Sie sehen eine Ihnen unbekannte Datendeklaration, dann das eigentliche Replace
und dann die Ausgabe als Klassenmethode
Sie sind gefordert, dieses Snippet auf ihre Kenntnisse anzupassen:
DAta str type string . "value 'Hallo' , dann sparen Sie sich die nächste Zeile h =
'Hallo'. REPLACE a IN str WITH e. write str.

Stringtemplates
Falls Sie in Python oder einer anderen Programmiersprache schon Stringtemplates
kennengelernt haben. lohnt es sich zu schauen, ob Sie sie verwenden wollen. In
ABAP heißen Sie Zeichenketten-Templates und sind auch so in der Doku zu
finden. Es muss aber nicht sein.
Aufgabe Schauen Sie sich alle Anweisungen aus der Übersicht an, kopieren Sie
sich die einfachsten Beispiel in ein neu angelegtes Programm und passen Sie diese
falls nötig wie oben an. Die Anweisung replace dürfen Sie per copy und paste

2
einbauen. Prägen Sie sich grob die Möglichkeiten der Stringverarbeitung ein und
lernen Sie in der Workbench wie man ein Programm in die Favoritenleiste der
Workbench (nicht im Easy Access) packt.
Aufgabe Deklarieren Sie eine Variable namens 'satz' vom Typ STRING und dem
Defaultwert 'Das Betreten der Baustelle ist verboten'
Wieviele Vokale hat dieser Satz? Nutze Sie die Anweisung TRANSLATE um
alle Buchstaben in Kleinbuchstaben umzuwandeln. Nutzen Sie die Anweisung
FIND mit einer Variante, die Matches zählen kann Nutzen Sie als Pattern
REGEX'[aeiou]' (mussten Sie dazu vorher LOWER CASE anwenden?
Kann man diesen Satz ohne Vokale lesen? Löschen Sie alle Vokale des Satzes,
indem Sie die Vokale mit '' ersetzen. Nutzen Sie die Anweisung REPLACE mit
dem oben genannten Pattern. Geben Sie den Satz aus!
Und nun ohne Leerzeichen. Splitten Sie den Satz bei den Leerzeichen in noch zu
definierende Variablen und setzen Sie ihn ohne Leerzeichen wieder zusammen
(SPLIT, CONCATENATE). Geben Sie den Satz aus.
Und nun alles zusammen. Definieren Sie zwei parameter (Anweisung PARAME-
TERS statt DATA) p_leer und p_ovok vom Typ C und wandeln Sie diese in
Checkboxen um (F1 auf Schlüsselwort PARAMETERS).
Wenn p_leer gesetzt ist, sollen alle Leerzeichen gelöscht werden wenn p_ovok
gesetzt ist, sollen alle Vokale gelöscht werden. Kontrollstrukturen können Sie
noch nicht
if not p_leer is initial. *Lösche die Leerzeichen endif.
Geben Sie dem Satz abhängig von der Benutzerwahl aus. Lassen Sie sich vom
Program Z00123STRINGVERARBEITUNG inspirieren.

Sy-subrc und andere Systemfelder


Sie werden bei einigen Anweisungen feststellen, dass die Anweisung einen Return-
code zurückgibt und diesen in das Systemfeld sy-subrc stellt. Sie sollten diesen
immer auswerten. Da sie die Kontrollstrukturen noch nicht kennen, reicht es,
wenn Sie ihn einfach ausgeben, und zwar direkt(!) nach der Anweisung, damit
er nicht überschrieben wird.
replace 'a' in str with 'e'. write: sy-subrc, str.
Sitzt der Sy-Subrc auf 0 ist das immer ein sehr gutes Zeichen. Alle anderen Werte
deuten auf Probleme hin. Welche - das entnehmen Sie der Doku. Es gibt noch
sehr (sehr) viel mehr Systemfelder: Sy-uname (Benutzername), Sy-uzeit(Zeit), sy-
datum(Datum)... Falls Sie neugierig sind, geben Sie in ihr Programm einmal das
wort "syst" ein und doppelklicken Sie es. Sie erhalten eine List der Systemfelder.
Mit dem grünen Pfeil kommen Sie zurück in Ihr Programm. In der Vorlesung
werden wir außer den oben genannten Systemfeldern noch weitere nutzen.

3
Zahlen - numerische Operatoren und Funktionen
Zu den numerischen Operatoren gibt es nicht viel zu sagen. Die Doku birgt
keinerlei Überraschungen. +,-,*./.div ,mod sind die Operatoren und auch die
Funktionen wie sin,cos,abs,... beherrscht ABAP.
data: s1 type i value 3, s2 type i value 4, result type p decimals 2. result = s1 +
s2. write result. result = s1 / s2. result = sin( s1 ). write result.

Kommazahlen - ein kleines Problem


const pi type p decimals 2 value 3.14.
Sehen Sie das Problem? Kleiner Tipp: Wo endet die Anweisung? Genau! Nach
dem Punkt hinter der 3 ist Schluss. Die Alternative const pi type p decimals
2 value 3,14. funktioniert auch nicht. Sie müssen Kommazahlen als Literale
darstellen.
const pi type p decimals 2 value '3.14'.

Datum
An ein Datenobjekt vom Typ d dürfen Sie relativ hohe Ansprüche stellen. Sie
können mit einem Datumstyp rechnen. Die Ausgabe ist nicht schön wenn Sie
nicht formatiert ist. Das Datum ist intern im Format YYYYMMDD Hier sehen
Sie zwei Möglichkeiten zum formatieren.
" Erster Tag im Jahr 2023 add 1 to dtm. write: / dtm.
" F1 auf das Schlüsselwort write int_format_options write: / dtm dd/mm/yyyy.
" mit Template write: / |{ dtm COUNTRY = 'DE ' }|. "Achtung Country hat
3(!) STellen
Aufgabe Lassen Sie den Anwender eine Jahreszahl eingeben (Anweisung parame-
ters typ N der Länge 4) und geben Sie aus, ob diese Jahreszahl ein Schaltjahr
ist. Das geht sehr einfach, indem Sie überprüfen, welcher Tag dem 28.2. des
Jahres folgt. Ab der 6. Stelle fängt der Tag an.(SHIFT)
if tag = '01'. "Es ist ein Schaltjahr endif.

Konvertierung
Faustregel: Wenn es klappt, dann klappt es. Diese Faustregel lässt sich leichter
merken als die offiziellen Konvertierunggsregeln. Seien Sie optimistisch und
weisen Sie den String '2021111' einem Datum zu . Denken Sie nicht an JAVA
sonder folgen Sie Ihrer Intuition. " Das müsste doch eigentlich gehen " ist ein
guter Ansatz.

Das könnte Ihnen auch gefallen