Ansicht
Dokumentation

SCP_TRANSLATE_CHARS_46 - Setze Zeichen von einem Zeichensatz in einen anderen um

SCP_TRANSLATE_CHARS_46 - Setze Zeichen von einem Zeichensatz in einen anderen um

SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up   rdisp/max_wprun_time - Maximum work process run time  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

Funktionalität

SCP_TRANSLATE_CHARS wandelt einen Text von einem Zeichensatz in einen anderen um. Die Wirkung ist ähnlich dem ABAP/4-Befehl TRANSLATE ... FROM CODE PAGE ... TO CODEPAGE ... . Allerdings läßt sich die Wirkungsweise genau steuern. Insbesondere wird immer der 'große' Zeichensatzumsetzer (rscpc.c) und nie die Byteumsetztabellen (aus rscpf1.c) benutzt. Das hat zur Folge, daß nicht korrekt umsetzbare Zeichen gefunden und einer Sonderbehandlung zugeführt werden können. Außerdem werden auch Zeichen umgesetzt, die länger als ein Byte sind.

Generell ist zu beachten, daß nicht an Ort und Stelle umgesetzt wird, sondern eine Eingabe- und eine Ausgabevariable angegeben werden muß.

Die Parameter im einzelnen:

INBUFF enthält den vorhandenen, zu bearbeitenden Text. Der übergebene Parameter muß Typ C oder Typ X haben.

INBUFFLG gibt an, wieviele Bytes aus INBUFF gelesen werden sollen. Falls INBUFF vom Typ C ist und komplett gelesen werden soll, darf INBUFFLG entfallen.

INCODE gibt den Zeichensatz an, der in INBUFF benutzt wurde. Wenn der aktuelle Systemzeichensatz benutzt wurde, darf INCODE entfallen.

In OUTBUFF wird das Ergebnis hineingeschrieben. (Typ C oder X)

OUTCODE gibt den Zeichensatz an, der in OUTBUFF benutzt werden soll. Wenn der aktuelle Systemzeichensatz benutzt wurden soll, darf OUTCODE entfallen.

OUTBUFFLG ist gibt an, wieviele Bytes maximal in OUTBUFF geschrieben werden dürfen. Falls OUTBUFF vom Typ C ist und komplett beschrieben werden darf, darf OUTBUFFLG entfallen.

In OUTUSED wird die Länge des Ausgabetextes hineingeschriben. Falls OUTBUFF länger ist, ist der Rest unverändert geblieben. (Anmerkung: Dies ist anders als z.B. bei ABAPs MOVE-Befehl.)

In OUTOVERFLOW wird ein 'X' geschrieben, wenn der Ausgabetext nicht vollständig in OUTTEXT hineingepaßt hat. Sonst ein Leerzeichen.

Falls es Zeichen gibt, die in einer der beiden beteiligten Zeichensätzen nicht vorkommen, so kann bestimmt werden, ob die Umsetzung abgebrochen werden soll, oder ob das Zeichen durch ein Ersatzzeichen dargestellt werden soll:

CSUBST = ' ' fordert ein Unterbrechen. Bei
CSUBST = 'X' werden Ersatzzeichen verwendet. Welches Zeichen als Ersatzzeichen benutzt werden soll, kann man über einen von den folgenden vier Parametern umprogrammieren:

SUBSTC gibt das Ersetzungszeichen an. Anzugeben ist eine SAP-Zeichennummer!

SUBSTC_HASH = 'X' fordert ein Nummernkreuz ("#") als Ersetzungszeichen an.

SUBSTC_DOT = 'X' fordert einen Punkt (".") als Ersetzungszeichen an.

SUBSTC_SPACE = 'X' fordert ein Leerzeichen ("") als Ersetzungszeichen an.

Die Grundeinstellung ist Ersetzen mit Nummernkreuz ("#").

In SUBSTED wird eingetragen, wieviele Zeichen ersetzt wurden.

In INPUT_ENDS_IN_CHAR wird ein 'X' eingetragen, falls INBUFF oder INBUFF(INBUFFLG) so endeten, daß es wie der Anfang eines Multi-Byte-Zeichens ausgesehen hatte.

In INUSED wird eingetragen, wieviele Bytes aus INBUFF verarbeitet worden sind. Das können weniger als alle sein, wenn die Umsetzung abgebrochen werden mußte, weil ein Zeichen nicht umsetzbar war, oder weil der Ausgabepuffer voll war.

In ERRMSG wird gegebenfalls eine kurze englische Fehlermledung eingetragen. Sie sollte nicht dem Endanwender gezeigt werden. Aber sie kann für interne Protokollzwecke oder bei der Fehlersuche benutzt werden.

Ausnahmen (EXCEPTIONS)

CANNOT_CONVERT bedeutet, daß in den Daten ein Zeichen vorkam, daß nicht umgesetzt werden konnte und gleichzeitig über CSUBST die Ersetzung verboten war.

Wenn man bei INCODE oder OUTCODE einen Zeichensatz angibt, den es gar nicht gibt, so erhält man INVALID_CODEPAGE.

Wenn INBUFF oder OUTBUFF nicht vom Typ C oder vom Typ X sind, kann der Funktionsbaustein sie nicht bearbeiten und meldet ein FIELDS_BAD_TYPE.

INTERNAL_ERROR sollte nie vorkommen.

Hinweise

Wenn man die Werte von INUSED und OUTUSED benutzt und mit Field-Symbols vorsichtig rechnet, kann man Stück für Stück lange Texte umsetzen, selbst wenn die Puffer unterschiedliche Länge haben.

Weiterführende Informationen

RSCP0107 vergleicht diesen Funktionsbaustein 'SCP_TRANSLATE_CHARS' mit dem TRANSLATE-Befehl.





Parameter

BROKEN
CTRLCODE
ERRMSG
FILL
FILTER
INBUFF
INBUFFLG
INCODE
INPUT_ENDS_IN_CHAR
INUSED
MISS
OUTBUFF
OUTBUFFLG
OUTCODE
OUTOVERFLOW
OUTUSED
SUBSTC
SUBSTC_DOT
SUBSTC_HASH
SUBSTC_SPACE
SUBSTED
USE_F1

Ausnahmen

CANNOT_CONVERT
FIELDS_BAD_TYPE
INTERNAL_ERROR
INVALID_CODEPAGE

Funktionsgruppe

SCPC

General Data in Customer Master   ABAP Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 6049 Date: 20240523 Time: 125108     sap01-206 ( 110 ms )