Rheinwerk < openbook > SAP-Wissen aus erster Hand
SAP-Wissen aus erster Hand.
 
Inhaltsverzeichnis
Vorwort zur vierten Auflage
1 ABAP und die ersten Schritte im SAP-System
2 ABAP Dictionary
3 Programmieren im ABAP Editor
4 Felder und Berechnungen
5 Modifikation von Zeichenketten
6 Debugging von Programmen
7 Modifikation von transparenten Datenbanktabellen
8 Rechnen mit Datum und Zeit, Mengen und Währungen
9 Mit Daten in einer Datenbanktabelle arbeiten
10 Programmablaufsteuerung und logische Ausdrücke
11 Selektionsbildschirme
12 Interne Tabellen
13 Modularisierung von Programmen
14 Weiterführende Themen
A Icons auf einen Blick
B Abkürzungsverzeichnis
C Die Autoren
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 23 KB

Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Einstieg in ABAP von Karl-Heinz Kühnhauser, Thorsten Franz
Buch: Einstieg in ABAP

Einstieg in ABAP
Pfeil 5 Modifikation von Zeichenketten
Pfeil 5.1 Zeichenketten deklarieren
Pfeil 5.2 Zeichenketten-Operationen
Pfeil 5.2.1 Zeichenketten verschieben
Pfeil 5.2.2 Zeichenketten ersetzen
Pfeil 5.2.3 Zeichenketten verdichten
Pfeil 5.2.4 Zeichenkettenfelder zusammenziehen
Pfeil 5.2.5 Zeichenketten zerlegen
Pfeil 5.2.6 Zeichenketten-Operationen mit direkter Positionierung
Pfeil 5.3 Codebeispiel zu String-Operationen
 
Zum Seitenanfang

5.3    Codebeispiel zu String-Operationen Zur vorigen ÜberschriftZur nächsten Überschrift

Das folgende Beispiel fügt alles zusammen:

 1  *&---------------------------------------------*
2 *& Report Z_TEILNEHMERLISTE03 *
3 *& *
4 *&---------------------------------------------*
5 *& *
6 *& *
7 *& *
8 *&---------------------------------------------*
9
10 REPORT z_teilnehmerliste03 .
11
12
13 * Zeichenketten deklarieren
14 DATA: geschlecht TYPE c length 1 VALUE 'W',
15 familienname TYPE zteilnehmer-tname,
16 telefon TYPE n LENGTH 8 VALUE '887766',
17 national_vorwahl TYPE n LENGTH 5 VALUE '09876',
18 international_vorwahl TYPE c LENGTH 5 VALUE '+49',
19 telefon_international TYPE c LENGTH 25.
20
21
22 * Kontrollausgabe der ursprünglichen Feldinhalte
23 WRITE / 'ursprüngliche Feldinhalte'.
24 WRITE: 30 telefon,
25 40 national_vorwahl,
26 50 international_vorwahl,
27 60 telefon_international.
28 ULINE.
29 * SHIFT-Anweisung
30 WRITE / 'Shift'.
31 SHIFT telefon LEFT DELETING LEADING '0'.
32 WRITE 30 telefon.
33 SHIFT telefon BY 2 PLACES RIGHT.
34 WRITE /30 telefon.
35 ULINE.
36 * REPLACE-Anweisung
37 WRITE / 'Replace'.
38 telefon_international = ' 887766'.
39 REPLACE ` ` IN telefon_international
WITH national_vorwahl.
40 WRITE 60 telefon_international.
41 REPLACE '0' IN telefon_international
WITH '+49-(0)'.
42 WRITE /60 telefon_international.
43 REPLACE ` ` IN telefon_international
WITH `-`.
44 WRITE /60 telefon_international.
45 ULINE.
46 * CONDENSE-Anweisung
47 WRITE / 'Condense'.
48 telefon_international = '+49 -(0)9876 887766'.
49 CONDENSE telefon_international.
50 WRITE 60 telefon_international.
51 CONDENSE telefon_international NO-GAPS.
52 WRITE /60 telefon_international.
53 ULINE.
54 * CONCATENATE-Anweisung
55 WRITE / 'Concatenate'.
56 telefon = '887766'.
57 SHIFT telefon LEFT DELETING LEADING '0'.
58 telefon_international = space.
59 CONCATENATE international_vorwahl
national_vorwahl
telefon
60 INTO
61 telefon_international
62 SEPARATED BY '-'.
63 WRITE 60 telefon_international.
64 ULINE.
65 * SPLIT-Anweisung
66 WRITE / 'Split'.
67 international_vorwahl = space.
68 national_vorwahl = space.
69 telefon = space.
70 SPLIT telefon_international AT '-'
71 INTO
72 international_vorwahl
national_vorwahl
telefon.
73 WRITE: 30 telefon,
74 40 national_vorwahl,
75 50 international_vorwahl.
76 ULINE.
77 * Direktes Positionieren
78 WRITE / 'Direktes Positionieren'.
79 international_vorwahl = space.
80 international_vorwahl =
telefon_international(3).
81 WRITE 50 international_vorwahl.
82 telefon_international = '+49-(0)9876-887766'.
83 national_vorwahl = space.
84 national_vorwahl = telefon_international+4(7).
85 WRITE 40 national_vorwahl.
86 telefon_international+1(2) = '33'.
87 WRITE 60 telefon_international.

Listing 5.1    Report Z_TEILNEHMERLISTE03

Anmerkungen zum Quellcode

Gehen wir den Quellcode einmal durch. Der Report beginnt mit der Deklaration der Zeichenkette.

Zeile 14 bis 19

In der Praxis müssen Sie bei der Konzeption der Felder und Datentypen im Vorfeld gründlich analysieren, welcher Datentyp am ehesten den fachlichen Anforderungen entspricht. Fehler in der Konzeption rächen sich später immer. In unserem Beispiel in Listing 5.1 wurde davon ausgegangen, dass die örtliche Telefonnummer und die nationale Vorwahlnummer ausschließlich numerisch sind. Bei der internationalen Vorwahl ist hingegen ein Pluszeichen enthalten, und die gesamte internationale Telefonnummer kann Trennzeichen wie Schrägstiche, Klammern oder Minuszeichen für die bessere Lesbarkeit enthalten. Deshalb müssen die internationale Vorwahl und die gesamte internationale Telefonnummer vom Typ c sein.

Zeile 23 bis 28

Diese Anweisungen dienen der Ausgabe der Liste. Aus Gründen der Übersichtlichkeit soll der Inhalt des Feldes TELEFON in der Zeile an Position 30 beginnen, der Inhalt des Feldes NATIONAL_VORWAHL an Position 40, INTERNATIONAL_VORWAHL und TELEFON_INTERNATIONAL entsprechend ab Spalte 50 und 60. Die Liste wird schließlich durch waagerechte Linien – hier und später – in überschaubare Themenbereiche aufgeteilt.

Zeile 31

Die Zeichenkette im numerischen Feld wird nach links verschoben, um die führenden Nullen zu entfernen. Je nach fachlicher Anforderung hätte man diese Aufgabe auch anders lösen können; aber wir sind ja noch in der Übungsphase.

Zeile 33

Der Inhalt des Feldes wird um zwei Stellen nach rechts verschoben; die ersten beiden Stellen bleiben Leerzeichen.

Zeile 38

Das Literal '  887766' wird der neue Inhalt des Feldes. Für das folgende Beispiel sind die beiden führenden Leerzeichen links wichtig.

Zeile 39

Das erste Leerzeichen wird durch den Inhalt des Feldes NATIONAL_VORWAHL ersetzt. Dies funktioniert nur, weil der Suchbegriff durch die Backquotes vom Typ string ist und somit das darin enthaltene Leerzeichen beachtet wird.

Zeile 41

Im Feld wird das Zeichen '0' an der Stelle ersetzt, an der es, von links aus betrachtet, zum ersten Mal auftritt, und zwar durch das Literal '+49-(0)'.

Zeile 43

Im Feld wird das Leerzeichen ` ` durch das Minuszeichen `-` an der ersten Fundstelle ersetzt. Auch hier arbeiten wir wieder mit einem String-Literal, damit das Leerzeichen nicht ignoriert wird, da es sonst nur eine Fundstelle vor der gesamten Zeichenkette gäbe.

Zeile 48

Das Feld TELEFON_INTERNATIONAL erhält für die Übung den definierten Inhalt '+49 -(0)9876  887766'. Im Feld befinden sich insgesamt drei Leerzeichen.

Zeile 49

Die Teil-Strings im Feld werden so weit zusammengezogen, dass sie jeweils nur noch ein Leerzeichen trennt.

Zeile 51

Auch die restlichen Leerzeichen im Feld werden eliminiert und die Teil-Strings lückenlos zusammengezogen.

Zeile 56 und 57

Mit bekannten Mitteln wird der Inhalt des Feldes auf den Ausgangswert für die Übung gesetzt.

Zeile 58

Das Feld TELEFON_INTERNATIONAL wird mit Leerzeichen gefüllt. Im Beispiel wird dafür das reservierte Wort SPACE verwendet, das mit dem Textfeldliteral ' ' und damit mit dem Textfeldliteral '' äquivalent ist und den Effekt hat, dass das Feld TELEFON_INTERNATIONAL nach der Zuweisung einen initialen, leeren Wert hat.

Zeile 59 bis 62

Die Anweisung erstreckt sich über vier Zeilen. Sie füllt das leere Feld TELEFON_INTERNATIONAL mit den Inhalten der Felder INTERNATIONAL_VORWAHL, NATIONAL_VORWAHL und TELEFON in der Reihenfolge, wie sie im Kommando geschrieben werden. Dabei werden im Zielfeld die Teil-Strings zur besseren Lesbarkeit durch ein Minuszeichen getrennt.

Zeile 67 bis 69

Die Felder werden für die Übung durch Zuweisung eines Leerzeichens initialisiert.

Zeile 70 bis 72

Der Inhalt des Feldes TELEFON_INTERNATIONAL wird nach dem Trennzeichen '-' durchsucht. Das Feld enthält dieses Trennzeichen an zwei Stellen; hierdurch ergeben sich drei Teil-Strings. Diese werden in die Zielfelder geschrieben, und zwar in der Reihenfolge, in der die Felder als Stellungsoperanden bei der Anweisung stehen.

Zeile 73 bis 75

Die zuvor mit Leerzeichen belegten Felder sind jetzt mit den Teil-Strings belegt und werden positionsgerecht in die Liste geschrieben.

Zeile 80

Das Feld INTERNATIONAL_VORWAHL wird mit den ersten drei Zeichen des Feldes TELEFON_INTERNATIONAL gefüllt.

Zeile 84

Aus dem Feld TELEFON_INTERNATIONAL werden nach Stelle 4 sieben Zeichen, nämlich die der Positionen 5, 6, 7, 8, 9, 10 und 11 kopiert, und das System versucht, diese Zeichen in das Feld NATIONAL_VORWAHL zu übertragen. Das Quellfeld ist vom Datentyp c, und an den Stellen 5 und 7 stehen Klammern. Beim Zielfeld handelt es sich um ein Feld vom Datentyp n, das keine Ziffern und Sonderzeichen akzeptiert. Durch die automatische Typkonvertierung werden nur die numerischen Zeichen in das Zielfeld übertragen.

Zeile 86

Im Feld TELEFON_INTERNATIONAL werden die Inhalte der Stellen 2 und 3 durch den Inhalt des Literals '33' überschrieben.

Ausgabe des Quellcodes

Am Anfang der Liste werden zur Kontrolle die Ursprungswerte der Felder ab Position 30 ausgegeben. Das Feld TELEFON hat dabei zwei führende Nullen; das Feld TELEFON_INTERNATIONAL ist noch leer (siehe Abbildung 5.1).

Listbild zu Z_TEILNEHMERLISTE03

Abbildung 5.1    Listbild zu Z_TEILNEHMERLISTE03

Im zweiten Abschnitt wurde die Zeichenkette zuerst nach links, dann nach rechts verschoben. Die Ergebnisse der REPLACE-Anweisung sind im dritten Abschnitt zu sehen: Zuerst wurde die führende Null durch die internationale Vorwahl ersetzt, anschließend das Leerzeichen durch ein Minuszeichen. Die CONDENSE-Anweisung im vierten Abschnitt hat die Leerzeichen aus der Zeichenkette entfernt; das CONCATENATE-Kommando im fünften Abschnitt hat eine durch Minuszeichen aufgeteilte Zeichenkette zusammengesetzt. Mit der SPLIT-Anweisung wurde diese Zeichenkette wieder auf drei Felder verteilt, und der letzte Abschnitt zeigt schließlich, wie durch direktes Positionieren aus der internationalen Vorwahl 49 eine 33 wird.

 


Ihre Meinung?

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Einstieg in ABAP Einstieg in ABAP
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: SAP – Der technische Einstieg
SAP – Der technische Einstieg


Zum Rheinwerk-Shop: ABAP Objects – Das umfassende Handbuch
ABAP Objects – Das umfassende Handbuch


Zum Rheinwerk-Shop: ABAP-Entwicklung für SAP S/4HANA
ABAP-Entwicklung für SAP S/4HANA


Zum Rheinwerk-Shop: Kundeneigene Erweiterungen mit ABAP
Kundeneigene Erweiterungen mit ABAP


Zum Rheinwerk-Shop: Schrödinger programmiert ABAP
Schrödinger programmiert ABAP


Zum Rheinwerk-Shop: Migration nach SAP S/4HANA
Migration nach SAP S/4HANA


Zum Rheinwerk-Shop: Design Thinking mit SAP
Design Thinking mit SAP


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und in die Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2020
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern