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.2    Zeichenketten-Operationen Zur vorigen ÜberschriftZur nächsten Überschrift

Häufig vorkommende und typische Operationen für Zeichenketten, die sogenannten String-Operationen, sind beispielsweise die Suche nach einem bestimmten oder einer Gruppe von Zeichen in einer Zeichenkette und die Ersetzung durch ein anderes Zeichen. Auch das Verschieben von Zeichen einer Zeichenkette nach rechts bzw. nach links – um Platz zu schaffen oder Lücken zu schließen – kommt häufig vor. Vielleicht möchten Sie die Zeichenkette auch durch Zeichen einer anderen Zeichenkette ergänzen oder aus einer Zeichenkette bestimmte Zeichen ausschneiden.

[zB]  Telefonnummern

Hierzu ein einfaches Beispiel: Wenn Sie das Feld TELEFON als numerische Zeichenkette mit acht Stellen deklarieren und mit dem Startwert 887766 belegen möchten, lautet die Anweisung:

DATA telefon TYPE n LENGTH 8 VALUE '887766'.

So weit, so gut: Sechs Stellen sind belegt, und zwei Stellen befinden sich in Reserve, falls Sie einmal eine längere Telefonnummer verarbeiten müssen. Sie scheinen alles richtig gemacht zu haben, denn Telefonnummern sind nicht zum Rechnen gedacht, und Buchstaben – Vanity-Nummern – sind bei uns noch nicht allzu üblich. Aber damit haben Sie übersehen, dass bei einer achtstelligen numerischen Zeichenkette der eigentliche Initialwert acht Nullen sind. Der sechsstellige Startwert von 887766 überschreibt sechs Nullen rechtsbündig, und links bleiben zwei führende Nullen stehen – der Feldinhalt lautet daher in Wirklichkeit 00887766.

Würden Sie versuchen, diese Nummer anzurufen, würden Sie wahrscheinlich verblüffende Erfahrungen machen, aber Ihren Wunschteilnehmer nicht erreichen. Die beiden führenden Nullen müssen deshalb mit einer String-Operation beseitigt werden.

 
Zum Seitenanfang

5.2.1    Zeichenketten verschieben Zur vorigen ÜberschriftZur nächsten Überschrift

Eine Möglichkeit wäre, die Zeichenkette nach links zu verschieben, bis die führenden Nullen verschwunden sind. Dies erreichen Sie mit folgender Anweisung:

SHIFT telefon LEFT DELETING LEADING '0'.

Durch die SHIFT-Anweisung wird der Feldinhalt, d. h. die Zeichenkette 00887766, so lange nach links verschoben, bis alle führenden Nullen gelöscht sind. Der Feldinhalt lautet nach der Operation 887766▯▯; das Feld wird demnach rechts mit zwei Leerzeichen aufgefüllt.

Natürlich können Sie eine Zeichenkette in einem Feld um eine bestimmte Anzahl Positionen auch in eine bestimmte Richtung verschieben. Möchten Sie die Telefonnummer wieder um zwei Stellen nach rechts rücken, schreiben Sie:

SHIFT telefon BY 2 PLACES RIGHT. 

Anschließend lautet der Feldinhalt so, wie Sie es sich ursprünglich vielleicht vorgestellt haben, nämlich ▯▯887766. Sie werden sich eventuell fragen, warum Sie dann nicht direkt ein Feld vom Typ c verwenden können. Dies hat den einfachen Grund, dass das System beim Typ c auch alle alphanumerischen Zeichen akzeptiert, d. h. auch Buchstaben und Sonderzeichen. Beim Typ n werden diese Zeichen hingegen vom System ignoriert. Falls die ganze Zeichenkette nur aus Buchstaben und Sonderzeichen besteht, wird das Feld auf den Initialwert gesetzt und erleichtert so das Programmieren von Prüf- und Fehlerroutinen, die falsche Eingaben erkennen und folgerichtig behandeln.

Lassen Sie die gezeigten Zusätze der SHIFT-Anweisung weg, erhalten Sie die kürzeste Form:

SHIFT telefon.
[»]  Datentypen

In erster Linie hängt es vom konkreten Fall ab, welcher Datentyp in welcher Situation der bessere ist. Besteht eine Artikelnummer aus alphanumerischen Zeichen, ist Typ c der richtige; besteht sie hingegen nur aus Zahlen und sollen formal falsche Feldinhalte von Anfang an vermieden werden, ist Typ n eher dafür geeignet.

Das System setzt dann für die fehlenden Operanden Standardwerte. Die Richtung ist standardmäßig links, die Anzahl der Positionen 1. Der Feldinhalt wird standardmäßig um eine Position nach links verschoben. Beim Verschieben von Feldinhalten sollten Sie deshalb sehr gut achtgeben; stellen Sie sich am besten ein Bücherregal vor: Wenn Sie auf einem Brett die Bücher zu weit zu einer Seite hin verschieben, fallen die äußersten Bücher herunter. So ähnlich ist auch das Prinzip beim Verschieben von Feldinhalten: Schieben Sie den Feldinhalt über den linken oder rechten Rand hinaus, gehen Zeichen unwiederbringlich verloren.

 
Zum Seitenanfang

5.2.2    Zeichenketten ersetzen Zur vorigen ÜberschriftZur nächsten Überschrift

Gleichgültig, ob Sie eine Dezimalzahl mit dem Dezimaltrennzeichen vom deutschen ins amerikanische Format umwandeln oder aus einer alten Materialnummer mit acht Stellen eine neue Materialnummer mit 16 Stellen erzeugen müssen, immer geht es darum, bestimmte Zeichen oder Zeichengruppen in einer Zeichenkette zu finden und zu ersetzen. Diese Aufgabe erledigen Sie mit der REPLACE-Anweisung.

Das Feld TELEFON_INTERNATIONAL sei vom Typ c, 25-stellig, mit dem Inhalt ▯▯887766; die ersten beiden Stellen sind also Leerzeichen. Sie möchten nun das führende Leerzeichen durch den Inhalt des Feldes NATIONAL_VORWAHL ersetzen.

Hierzu verwenden Sie folgende Anweisung:

REPLACE ` ` IN telefon_international
WITH national_vorwahl.

Die REPLACE-Anweisung sucht und ersetzt das erste Auftreten des Suchbegriffs, der hier » « (Leerzeichen) lautet. Ist das Feld NATIONAL_VORWAHL vom Typ n, fünfstellig, mit dem Inhalt 09876, hat das Feld TELEFON_INTERNATIONAL nach dieser Operation den Inhalt 09876887766. Das erste Leerzeichen wurde durch die nationale Vorwahlnummer ersetzt; das zweite Leerzeichen bleibt erhalten und steht jetzt zwischen der nationalen Vorwahl und der Ortstelefonnummer.

Vielleicht ist Ihnen schon eine Besonderheit aufgefallen: Anstelle der sonst üblichen Hochkommata ist das Leerzeichen in Backquotes (`) eingeschlossen. Welche Bewandtnis hat es damit? Unser im Programmtext abgelegter Suchbegriff » « (Leerzeichen) ist ein Zeichenliteral. In ABAP gibt es zwei Arten von Zeichenliteralen, die sich durch ihren Datentyp und ihren Umgang mit Leerzeichen unterscheiden:

  • Textfeldliterale sind vom Datentyp c,

  • String-Literale sind vom Datentyp string

Beide unterscheiden sich durch ihren Umgang mit schließenden Leerzeichen.

Bei Textfeldliteralen werden schließende Leerzeichen ignoriert und so behandelt, als wären sie nicht vorhanden. Das Textfeldliteral 'ABC   ' wird als 'ABC' und ein Textfeldliteral ' ' als leerer Wert behandelt. Die REPLACE-Anweisung geht mit einem leeren Suchbegriff um, indem sie den Ersetzungsbegriff vor der bearbeiteten Zeichenkette einfügt. Die folgende REPLACE-Anweisung mit Hochkommata würde das Ergebnis 09876▯▯887766 mit zwei Leerzeichen hervorbringen, da der Ersetzungsbegriff einfach vor der Zeichenkette eingefügt würde:

REPLACE ' ' IN telefon_international
WITH national_vorwahl.

In der korrekten Variante mit den Backquotes hingegen werden schließende Leerzeichen respektiert. Das Textfeldliteral `ABC   ` wird tatsächlich als `ABC   ` und unser Leerzeichen ` ` als ein Leerzeichen behandelt. Damit kann die REPLACE-Anweisung erfolgreich ausgeführt werden: Das erste Leerzeichen in TELEFON_INTERNATIONAL wird als mit dem Suchbegriff identisch erkannt und durch NATIONAL_VORWAHL ersetzt. Führende Leerzeichen werden übrigens bei Textfeldliteralen ebenso wie bei String-Literalen respektiert.

[zB]  Internationale Vorwahl

Zum besseren Verständnis noch ein zweites Beispiel: Angenommen, das Feld TELEFON_INTERNATIONAL hat den Inhalt 09876887766. Unter sonst gleichen Bedingungen möchten Sie die führende Null durch die internationale Vorwahl sowie eine eingeklammerte Null ersetzen, d. h. für Deutschland beispielsweise durch den String +49-(0), dann müsste die Anweisung lauten:

REPLACE '0' IN telefon_international
WITH '+49-(0)'.

Nach der Operation hätte das Feld den Inhalt +49-(0)9876887766. Soll das verbliebene Leerzeichen zwischen nationaler Vorwahl und örtlicher Telefonnummer durch ein Minuszeichen ersetzt werden, würde die Anweisung wiederum lauten:

REPLACE ` ` IN telefon_international WITH `-`.

Diese Anweisung sucht ein Leerzeichen (als String-Literal), findet es erstmals im Feld an Position 12 und tauscht es gegen ein Minuszeichen aus. (Beim Minuszeichen spielt es keine Rolle, ob Sie Backquotes für ein String-Literal oder normale Hochkommata für ein Textfeldliteral verwenden.) Der Feldinhalt lautet dann +49-(0)9876-887766.

 
Zum Seitenanfang

5.2.3    Zeichenketten verdichten Zur vorigen ÜberschriftZur nächsten Überschrift

In langen Textfeldern finden sich häufig überflüssige Leerzeichen. Auch durch String-Operationen können in längeren Zeichenketten solche Leerzeichen entstehen. Sie haben die Möglichkeit, in einem Feld die Teil-Strings so weit zusammenzuziehen, dass alle überflüssigen Leerzeichen entfernt werden, oder aber die Zeichenketten mehrerer Felder in einem Feld zu sammeln und dann zu verdichten.

Betrachten Sie zunächst die erste Möglichkeit: Angenommen, das Feld TELEFON_INTERNATIONAL hat den Inhalt +49-(0)9876▯▯887766. Zwischen der internationalen Vorwahl und der nationalen steht dabei ein Leerzeichen, und zwischen der nationalen Vorwahl und der Telefonnummer stehen zwei Leerzeichen, d. h. insgesamt drei Leerzeichen.

Mit der CONDENSE-Anweisung ziehen Sie die drei Teile der Zeichenkette im Feld TELEFON_INTERNATIONAL so weit zusammen, dass zwischen der internationalen Vorwahl +49, der nationalen Vorwahl -(0)9876 und der örtlichen Telefonnummer 887766 nur noch jeweils ein Leerzeichen bestehen bleibt, gleich, wie viele Leerzeichen zuvor dazwischen standen; es fällt demnach nur das dritte Leerzeichen weg, und der Feldinhalt von TELEFON_INTERNATIONAL lautet nach folgender Operation +49-(0)9876887766:

CONDENSE telefon_international.
[+]  NO-GAPS

Stören Sie auch die verbliebenen Leerzeichen, können Sie mit dem Zusatz NO-GAPS alle Leerzeichen zwischen den Zeichenketten entfernen. Die Anweisung müsste dann lauten:

CONDENSE telefon_international NO-GAPS.

Anschließend ist der Feldinhalt auf +49-(0)9876887766 korrigiert.

 
Zum Seitenanfang

5.2.4    Zeichenkettenfelder zusammenziehen Zur vorigen ÜberschriftZur nächsten Überschrift

Es gibt jedoch einen bequemeren Weg, um Zeichenkettenfelder in frei wählbarer Reihenfolge in ein Zielfeld zu stellen. Stellen Sie sich vor, Sie möchten zwei Felder in einer Listzeile ausgeben: das Feld NAME und das Feld VORNAME. Beide sind vom Typ c und jeweils 40 Stellen lang. Allein mit diesen beiden Feldern würden 80 Spalten der Listzeile belegt – und viele davon wären Leerzeichen. Praktischer wäre es, für die Ausgabe den Inhalt beider Felder in ein eigenes Ausgabefeld zu schreiben und die Zeichenketten so zusammenzuziehen, bis nur noch ein Leerzeichen zwischen Name und Vorname bestehen bleibt.

Dieses Prinzip ist auch auf unsere Telefonnummer anwendbar. Angenommen, Sie möchten die Inhalte der bekannten Felder INTERNATIONAL_VORWAHL, NATIONAL_VORWAHL und TELEFON in genau dieser Reihenfolge in das Feld TELEFON_INTERNATIONAL übertragen, dann verwenden Sie die Anweisung CONCATENATE:

CONCATENATE international_vorwahl
national_vorwahl
telefon
INTO
telefon_international.

Bei den Angaben zu den Quellfeldern handelt es sich bei CONCATENATE um Stellungsoperanden, bei denen die Reihenfolge der Quellfelder für die Reihenfolge der Zeichenketten im Zielfeld entscheidend ist. Mit anderen Worten: Ist das Feld INTERNATIONAL_VORWAHL der erste Operand, ist auch der Inhalt des Feldes der erste Teil der Zeichenkette im Feld TELEFON_INTERNATIONAL; entsprechend ist der Inhalt des Feldes NATIONAL_VORWAHL der zweite Teil der Zeichenkette im Zielfeld und der Inhalt von TELEFON der dritte Teil. Führende Leerzeichen werden übernommen; schließende Leerzeichen werden bei Quellfeldern vom Typ c ignoriert, bei Quellfeldern vom Typ string aber respektiert.

Hat in unserem Beispiel das Quellfeld INTERNATIONAL_VORWAHL den Inhalt +49, das Feld NATIONAL_VORWAHL den Inhalt 09876 und das Feld TELEFON den Inhalt 887766, lautet der Inhalt des Zielfeldes TELEFON_INTERNATIONAL nach der Operation +4909876887766.

Besser lesbar wäre es zweifelsohne, wenn die einzelnen Bestandteile der Telefonnummer durch ein Minuszeichen getrennt wären. Genau für solche Fälle ermöglicht die CONCATENATE-Anweisung den Zusatz SEPARATED BY: Hier geben Sie eine Variable oder ein Literal an, das als Trennzeichen zwischen die Zeichenkettenteile geschoben wird.

In unserem Beispiel verwenden wir das Literal '-' und schreiben:

CONCATENATE international_vorwahl
national_vorwahl
telefon
INTO
telefon_international
SEPARATED BY '-'.

Zur besseren Übersichtlichkeit ist die Anweisung über mehrere Zeilen verteilt. Der Feldinhalt von TELEFON_INTERNATIONAL lautet nach der Operation +49-09876-887766.

[+]  Neuere Schreibweisen

Seit SAP NetWeaver 7.0 EHP 2 stehen einige neue Befehle und Funktionen zur Bearbeitung von Zeichenketten zur Verfügung. So können Zeichenketten mit den Operatoren & und && verkettet werden:

telefon_international = international_vorwahl &
'-' &
national_vorwahl &
'-' &
telefon.

Außerdem stehen zahlreiche neue Funktionen für die Zeichenkettenverarbeitung zur Verfügung. Größtenteils ähneln diese den bestehenden Kommandos wie CONDENSE, CONCAT_LINES_OF, REPLACE, SHIFT_LEFT, SHIFT_RIGHT, SUBSTRING, TO_UPPER, TO_LOWER und TRANSLATE. Es finden sich jedoch auch ganz neue Funktionen, die einen Blick in die ABAP-Sprachdokumentation lohnen. Als Beispiel sei die neue REPLACE-Funktion aufgeführt:

telefon_international = REPLACE( val  = '09876-887766'
sub = '0'
with = '+49-(0)-'
occ = 0 ).

Diese Anweisung ersetzt in der Zeichenkette 09876-887766 alle Vorkommnisse des Suchstrings 0 mit +49-(0)- und weist das Ergebnis der Variablen TELEFON_INTERNATIONAL zu. Um sicherzugehen, dass anstatt aller Vorkommen nur die erste Null ersetzt wird, können Sie für den Parameter occ auch den Wert 1 übergeben. Das Ergebnis wäre für das vorliegende Beispiel das gleiche: +49-(0)-9876-887766.

 
Zum Seitenanfang

5.2.5    Zeichenketten zerlegen Zur vorigen ÜberschriftZur nächsten Überschrift

Genauso gut ist der umgekehrte Fall zur CONCATENATE-Anweisung denkbar, wenn etwa eine große Zeichenkette zerlegt oder Teile der Zeichenkette in ein eigenes Feld geschrieben werden müssen: Beispielsweise steht die internationale Telefonnummer in einer großen Zeichenkette wie im angegebenen Feld, und Sie möchten diese Zeichenkette in internationale Vorwahl, nationale Vorwahl und örtliche Telefonnummer zerlegen.

Diese umgedrehte Aufgabenstellung lösen Sie mit der SPLIT-Anweisung. Sie teilt eine Zeichenkette auf mehrere Felder auf:

SPLIT telefon_international AT '-'
INTO
international_vorwahl national_vorwahl telefon.

Mit dieser Anweisung wird das Feld TELEFON_INTERNATIONAL bei der Trennzeichenkette zerlegt. Die Trennzeichenkette folgt dem Zusatz AT und ist entweder der Inhalt eines Feldes, das als Variable geschrieben wird, oder wie in unserem Beispiel ein Literal. Die Zielfelder werden wieder als Stellungsoperanden geschrieben. Sie sollten daher abermals die Reihenfolge der Zielfelder explizit beachten. Außerdem ist es sehr wichtig, dass die Zielfelder groß genug sind, um die Zeichenketten aufnehmen zu können.

Hat das Feld TELEFON_INTERNATIONAL vor der Anweisung den Inhalt +49-09876-887766, hat das Feld INTERNATIONAL_VORWAHL nach der Anweisung den Inhalt +49, das Feld NATIONAL_VORWAHL den Inhalt 09876 und das Feld TELEFON den Inhalt 887766.

 
Zum Seitenanfang

5.2.6    Zeichenketten-Operationen mit direkter Positionierung Zur vorigen ÜberschriftZur nächsten Überschrift

Es gibt noch eine weitere Gruppe von Aufgabenstellungen, für die String-Operationen erforderlich sind. Manchmal muss in eine Zeichenkette an einer bestimmten Position in einer bestimmten Länge etwas hineingeschrieben werden, oder es müssen im umgekehrten Fall ab einer bestimmten Position Zeichen in einer bestimmten Länge herausgelesen werden.

Angenommen, das Feld TELEFON_INTERNATIONAL hat den Inhalt +49-(0)9876-887766, und Sie wissen, dass bei der internationalen Telefonnummer die ersten drei Zeichen immer die internationale Vorwahlnummer bilden, dann können Sie auf diese drei Zeichen direkt durch Positionierung und Längenangabe zugreifen und die Zeichenkette mit der folgenden ABAP-Anweisung in das Zielfeld INTERNATIONAL_VORWAHL stellen:

international_vorwahl = telefon_international+0(3).

Umgangssprachlich lautet die Anweisung, dass der neue Inhalt des Zielfeldes INTERNATIONAL_VORWAHL der Inhalt des Quellfeldes TELEFON_INTERNATIONAL ist, und zwar ab Position 0 in der Länge von drei Zeichen. Die Längenangabe wird demnach in Klammern und ohne Leerzeichen direkt hinter das Quellfeld geschrieben.

Häufig liegt der gesuchte Teil-String irgendwo in der Mitte der Zeichenkette, und auch dann müssen Sie bei dieser Methode die Anfangsposition und die Länge des gesuchten Teils kennen. In unserem Beispiel könnten Sie die nationale Vorwahlnummer aus der internationalen Telefonnummer herauskopieren und in ein Zielfeld stellen. Voraussetzung ist in unserem Beispiel, dass die nationale Vorwahl immer nach Position 4 beginnt und inklusive der vorangestellten, in Klammern stehenden Null eine Länge von sieben Zeichen hat. Wir wollen an dieser Stelle zugunsten der Einfachheit unseres Beispiels großzügig übersehen, dass es auch Vorwahlen mit drei Stellen gibt. Sie übertragen daher die Zeichen der Stellen 5, 6, 7, 8, 9, 10 und 11. Die Anweisung hierfür lautet:

national_vorwahl = telefon_international+4(7).
[+]  Typ c versus Typ n

An diesem Beispiel sehen Sie auch deutlich den Unterschied bei den Datentypen. Hat das Zielfeld den Typ c, hat es nach der Anweisung den Inhalt (0)9876. Ist es jedoch vom Typ n, hat es den Inhalt 09876, da beim Datentyp n die Klammern als alphanumerische Zeichen ignoriert werden.

Über diesen Weg können Sie nicht nur Zeichen aus einer Zeichenkette herauslesen, sondern auch Zeichen in einer Kette manipulieren. Angenommen, Sie möchten die internationale Vorwahlnummer 49 durch 33 ersetzen, dann schreiben Sie:

telefon_international+1(2) = '33'.

Da Sie möchten, dass die erste Stelle – das Pluszeichen – auch bei der neuen internationalen Vorwahl bestehen bleibt, ersetzen Sie hinter Stelle 1 die Stellen 2 und 3 des Feldes TELEFON_INTERNATIONAL durch das Literal '33'.

 


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