Datenkonvertierung

Wegen Unterschieden in der Art und Weise der Interpretation von Daten in unterschiedlichen Laufzeitumgebungen muss Ihr Programm möglicherweise die Daten konvertieren, die von einer Umgebung an eine andere Umgebung übergeben werden. Daten, die von Java™-Umgebungen in COBOL-Umgebungen und von COBOL in Java verschoben werden, müssen immer eine Datenkonvertierung durchlaufen. Die Datenkonvertierung erfolgt während der COBOL-Vorbereitungszeit und zur COBOL- oder Java-Laufzeit.

Programme, die bidirektionale Sprachen wie Arabisch oder Hebräisch unterstützen, können die BIDI-Konvertierungstabellen verwenden, um zusätzlich zur Codepagekonvertierung die Änderung der Richtung von Textdaten anzugeben. Informationen zur Erstellung von BIDI-Konvertierungstabellen finden Sie im Abschnitt "Bidireltionaler Sprachtext".

Der COBOL-Vorbereitungsprozess konvertiert Dateiinhalt, Dateipfadinformationen und Werte der Umgebungsvariablen bei der Übertragung workstationbasierter Dateien auf einen Build-Server. Für diese Situation werden die Schritte, die für den Aufbau einer Datenkonvertierungstabelle erforderlich sind, weiter unten in diesem Abschnitt beschrieben.

Ihr Programm verwendet ferner in folgenden Laufzeitsituationen eine Konvertierungstabelle:
Möglicherweise verwenden Sie die Laufzeitkonvertierung in folgenden Situationen:
Die nächsten Abschnitte enthalten die folgenden Details:

Informationen zur Anpassung der Konvertierungstabelle in der z/OS-COBOL-Umgebung finden Sie unter IBM Rational COBOL Runtime Guide für zSeries.

Datenkonvertierung bei der Generierung eines COBOL-Programms

Wenn COBOL auf einer Workstation auf einem z/OS- oder einem iSeries-Build-Server vorbereitet wird, erfolgt die Konvertierung in Übereinstimmung mit Ihren Angaben in den Builddeskriptoroptionen clientCodeSet und serverCodeSet auf einem Build-Server. Jede dieser Builddeskriptoroptionen muss einen codierter Zeichensatz angeben, der für den ICONV-Konvertierungsservice auf z/OS und iSeries definiert ist. Fehlt die Angabe, werden die Standardeinstellungen verwendet.

Programme, die bidirektionale Sprachen wie Arabisch oder Hebräisch unterstützen, können zusätzlich zur Codepagekonvertierung auch eine Umordnung der Textliterale erfordern. Weitere Informationen finden Sie im Abschnitt "Bidirektionaler Sprachtext".

Datenkonvertierung zur Laufzeit in einem generierten COBOL-Programm.

Wenn ein generiertes COBOL-Programm auf ein Programm oder eine Datei in einer fernen CICS-Region zugreift, die den ASCII-Zeichensatz unterstützt, wird in Übereinstimmung mit der Konvertierungstabelle eine Konvertierung im aufrufenden Programm vorgenommen. Die Konvertierungstabelle ist in diesem Fall ein Lademodul, das Informationen zur Codepageumsetzung enthält.

Die Texttabelle listet die Konvertierungstabellen auf, die mit EGL ausgeliefert wurden und auf die zur Laufzeit von einem generierten COBOL-Programm zugegriffen werden kann. Diese Konvertierungstabelle konvertiert Daten zwischen dem EBCDIC-Format und den Windows 2000/NT/XP ASCII-Zeichensatztabellen.

Sprache Tabellenname
Brasilianisches Portugiesisch ELACNPTB
Vereinfachtes Chinesisch ELACNCHS
Traditionelles Chinesisch ELACNCHT
Englisch in Großschreibung ELACNENP
Amerikanisches Englisch ELACNENU
Französisch ELACNFRA
Deutsch ELACNDEU
Italienisch ELACNITA
Japanisch, Katakana (Einzelbytezeichensatz) ELACNJPN
Koreanisch ELACNKOR
Spanisch ELACNESP
Deutsch (Schweiz) ELACNDES

Datenkonvertierung zur Ausführungszeit in einem generierten Java-Programm

Die folgenden Regeln gelten für Java-Code:
  • Wenn ein generiertes Java-Programm oder ein Wrapper ein generiertes Java-Programm aufruft, erfolgt die Konvertierung im aufrufenden Programm und zwar in Übereinstimmung mit eine Reihe von EGL-Klassen, die zur Ausführungszeit initiiert wurden. In den meisten Fällen ist überhaupt keine Konvertierung erforderlich. Selbst wenn der Aufrufer auf eine ferne Plattform zugreift, die eine Codepage verwendet, die sich von der Codepage unterscheidet, die vom aufrufenden Programm verwendet wird. Sie müssen jedoch in folgender Situation eine Konvertierungstabelle angeben:
    • Das aufrufende Programm ist Java-Code und befindet sich auf einem System, das genau eine Codepage unterstützt.
    • Das aufgerufene Programm ist kein Java-Programm und befindet sich auf einem System, das eine andere Codepage unterstützt.

    Der Tabellenname ist in diesem Fall ein Symbol, das die Art der Konvertierung angibt, die zur Ausführungszeit erforderlich ist.

  • Wenn ein generiertes Java-Programm auf eine ferne WebSphere MQ-Nachrichtenwarteschlange zugreift, erfolgt die Konvertierung im aufrufenden Programm und zwar in Übereinstimmung mit eine Reihe von EGL-Klassen, die zur Ausführungszeit initiiert wurden. Wenn das aufrufende Programm auf eine ferne Plattform zugreift, die eine Codepage verwendet, die sich von der vom aufrufenden Programm verwendeten Codepage unterscheidet, geben Sie im zugehörigen Element, das sich auf die WebSphere MQ-Nachrichtenwarteschlange bezieht, eine Konvertierungstabelle an.
In der folgenden Tabelle sind die Konvertierungstabellen aufgelistet, auf die generierter Java-Code zur Laufzeit zugreifen kann. Jeder Name hat das Format CSOcx. Variablen werden in der folgenden Liste erläutert:
c
Diese Variable stellt den auf der aufgerufenen Programmplattform unterstützen Zeichensatz dar. Wählen Sie einen der folgenden Werte aus:
  • J steht für Java (wenn das aufgerufene Programm ein mit EGL generiertes Java-Programm ist)
  • E steht für EBCDIC (wenn das aufgerufene Programm ein mit EGL generiertes COBOL-Programm ist)
x
Diese Variable stellt die Codepagenummer für die angegebene Sprache auf der Plattform des fernen Programms dar. Die einzelnen Nummern sind in der Veröffentlichung Character Data Representation Architecture Reference and Registry, IBM Form SC09-2190, angegeben. Die Registry gibt die codierten Zeichensätze an, die von den Konvertierungstabellen unterstützt werden.

  Ferne Plattformen
Sprache Linux UNIX Windows 2000/NT/XP z/OS UNIX System Services oder iSeries Java z/OS oder iSeries COBOL
Arabisch CSOJ1046 CSOJ1046 CSOJ1256 CSOJ420 CSOE420
Vereinfachtes Chinesisch CSOJ1381 CSOJ1381 CSOJ1386 CSOJ1388 CSOE1388
Traditionelles Chinesisch CSOJ950 CSOJ950 CSOJ950 CSOJ1371 CSOE1371
Kyrillisch CSOJ866 CSOJ866 CSOJ1251 CSOJ1025 CSOE1025
Dänisch CSOJ850 CSOJ850 CSOJ850 CSOJ277 CSOE277
Osteuropa CSOJ852 CSOJ852 CSOJ1250 CSOJ870 CSOE870
Britisches Englisch CSOJ850 CSOJ850 CSOJ1252 CSOJ285 CSOE285
Amerikanisches Englisch CSOJ850 CSOJ850 CSOJ1252 CSOJ037 CSOE037
Französisch CSOJ850 CSOJ850 CSOJ1252 CSOJ297 CSOE297
Deutsch CSOJ850 CSOJ850 CSOJ1252 CSOJ273 CSOE273
Hebräisch CSOJ856 CSOJ856 CSOJ1255 CSOJ424 CSOE424
Japanisch CSOJ943 CSOJ943 CSOJ943 CSOJ1390 (Katakana SBCS), CSOJ1399 (Latin SBCS) CSOE1390 (Katakana SBCS), CSOE1399 (Latin SBCS)
Koreanisch CSOJ1363 CSOJ1363 CSOJ1363 CSOJ1364 CSOE1364
Portugiesisch CSOJ850 CSOJ850 CSOJ1252 CSOJ037 CSOE037
Spanisch CSOJ850 CSOJ850 CSOJ1252 CSOJ284 CSOE284
Schwedish CSOJ850 CSOJ850 CSOJ1252 CSOJ278 CSOE278
Deutsch (Schweiz) CSOJ850 CSOJ850 CSOJ1252 CSOJ500 CSOE500
Türkisch CSOJ920 CSOJ920 CSOJ1254 CSOJ1026 CSOE1026

Wenn Sie ein Programm von Java aufrufen und im Verbindungsoptionsabschnitt keinen Wert für die Konvertierungstabelle angeben, sind die Standardkonvertierungstabellen die Tabellen für Amerikanisches Englisch.

Konvertierungsalgorithmus

Die Datenkonvertierung von Datensätzen und Strukturen basiert auf den Deklarationen von Strukturfeldern, die keine Unterstruktur haben.

Für Variablen ohne Namen (diese Variablen sind in einem strukturierten Datensatz durch ein Sternchen gekennzeichnet) oder für Variablen vom Typ BIN, BIGINT, BOOLEAN, INT, SMALLINT, DECIMAL, MONEY, PACF, HEX, STRING oder UNICODE wird keine Konvertierung ausgeführt. Wenn Sie jedoch eine bidirektionale Umsetzung verwenden, werden UNICODE- und STRING-Variablen wie in der Tabelle definiert umgekehrt. Weitere Information finden Sie in Mit bidirektionalen Daten arbeiten.

Daten vom Typ CHAR, DBCHAR oder MBCHAR werden entsprechend der COBOL- oder Java-Konvertierungstabellen konvertiert.

Für Variablen vom Typ FLOAT und SMALLFLOAT konvertiert die Konvertierungsroutine von Java in zSeries COBOL und zurück mithilfe des IEEE 754-Formats für Java und mithilfe des IBM® 370-Formats für zSeries COBOL. Für die Variablen FLOAT und SMALLFLOAT ist zwischen Java und iSeries COBOL keine Konvertierung erforderlich.

Bei der EBCDIC-in-ASCII-Konvertierung für MBCHAR-Daten löscht die Konvertierungsroutine DBCS-Startzeichen und DBCS-Endezeichen und fügt eine entsprechende Anzahl an Leerzeichen am Ende der Variablen ein. Bei der ASCII-in-EBCDIC-Konvertierung fügt die Konvertierungsroutine DBCS-Startzeichen und DBCS-Endezeichen vor und nach den Doppelbytezeichenfolgen ein und schneidet den Wert beim letzten gültigen Zeichen ab, das in das Feld hineinpasst. Wenn das MBCHAR-Feld in einem Datensatz mit variabler Länge enthalten ist und das Ende des aktuellen Datensatzes sich im MBCHAR-Feld befindet, wird die Datensatzlänge angepasst, um das Einfügen oder Löschen von DBCS-Startzeichen und DBCS-Endezeichen widerzuspiegeln. Die Datensatzlänge gibt an, wo der aktuelle Datensatz endet.

Für Variablen vom Elementtyp NUM oder NUMC konvertiert die Konvertierungsroutine alles bis auf das letzte Byte mithilfe des CHAR-Algorithmus. Das Halbbytezeichen, das das erste Halbbyte des letzten Byte im Feld ist, wird entsprechend des in der folgenden Tabelle angezeigten Hexadezimalwerts konvertiert.
Tabelle 1. Konvertierung für NUM- und NUMC-Variablen
EBCDIC für Typ NUM EBCDIC für Typ NUMC ASCII
F (positives Vorzeichen) C 3
D (negatives Vorzeichen) D 7

Für Variablen vom Typ DATE, INTERVAL, TIME oder TIMESTAMP konvertiert EGL die Werte mithilfe des CHAR-Algorithmus und des Zeichenfolgeformats der Variablen

Weitere Informationen zur Systemfunktion sysLib.convert() und zur Systemvariablen sysVar.callConversionTable finden Sie in den Abschnitten zu "convert()" und "callConversionTable" in der EGL-Sprachreferenz.


Feedback