Conversión de datos

Debido a las diferencias en la interpretación de los datos en los diversos entornos de ejecución, es posible que el programa necesite convertir los datos que pasa de un entorno a otro. La conversión de datos se produce durante la preparación COBOL y durante la ejecución COBOL o Java.

El proceso de preparación de COBOL convierte el contenido de archivos, la información de vías de acceso de archivo y los valores de variables de entorno al transferir los archivos basados en estación de trabajo a un servidor de construcción. Los pasos necesarios para establecer una tabla de conversión de datos en este caso se describen más adelante.

El código también utiliza una tabla de conversión en las siguientes situaciones de ejecución:

Utilizará la conversión en tiempo de ejecución, por ejemplo, si el código coloca valores en uno o dos registro redefinidos, cada uno de los cuales hace referencia a la misma área de memoria que un registro que se pasa a otro programa. Supongamos que las características de los datos que se pasan son diferentes, dependiendo del registro redefinido al que se asignan valores. En este caso, los requisitos de la conversión de datos no pueden conocerse durante la generación.

Las secciones que siguen proporcionan los siguientes detalles:

Conversión de datos al generar un programa COBOL

Cuando COBOL se genera en una estación de trabajo y se prepara en un servidor de construcción z/OS o iSeries, la conversión se maneja en el servidor de construcción de acuerdo con la especificación realizada por el usuario en las opciones clientCodeSet y serverCodeSet del descriptor de construcción. Cada una de estas opciones del descriptor de construcción debe identificar un conjunto de códigos definido en el servicio de conversión ICONV en z/OS e iSeries, y se utilizarán valores por omisión en ausencia de una especificación.

Consulte también el apartado Texto de idioma bidireccional.

Conversión de datos durante la ejecución cuando el llamador es un programa COBOL

Cuando un programa COBOL generado por EGL accede a un programa o archivo en una región CICS remota que da soporte al juego de caracteres ASCII, se produce una conversión en el llamador de acuerdo con una tabla de conversión. En este caso, la tabla de conversión es un módulo de carga que contiene información acerca de la traducción e páginas de códigos.

La tabla siguiente lista las tablas de conversión suministradas con EGL y a las que puede acceder un programa COBOL generado durante la ejecución. Estas tablas de conversión convierten datos entre el formato EBCDIC y las páginas de códigos ASCII de Windows 2000/NT/XP.

Idioma Nombre de tabla
Portugués de Brasil ELACNPTB
Chino simplificado ELACNCHS
Chino tradicional ELACNCHT
Inglés en mayúsculas ELACNENP
Inglés de Estados Unidos ELACNENU
Francés ELACNFRA
Alemán ELACNDEU
Italiano ELACNITA
Japonés Katakana (juego de caracteres de un solo byte) ELACNJPN
Coreano ELACNKOR
Español ELACNESP
Alemán de Suiza ELACNDES

Conversión de datos cuando el invocante es código Java

Las siguientes normas atañen al código Java:
  • Cuando un programa o envoltura Java generado invoca un programa Java generado, la conversión se produce en el llamador, de acuerdo con un conjunto de clases EGL invocadas durante la ejecución. En la mayoría de los casos es suficiente con solicitar que no se realice ninguna conversión, aunque el llamador acceda a una plataforma remota que utilice una página de códigos que sea diferente de la página de códigos utilizada por el invocante. Sin embargo, debe especificar una tabla de conversión en los siguientes casos:
    • El llamador es código Java y se encuentra en una máquina que da soporte a una página de códigos
    • El programa llamado no es Java y se encuentra en una máquina que da soporte al otra página de códigos

    En este caso, el nombre de tabla es un símbolo que indica el tipo de conversión necesaria durante la ejecución.

  • Cuando un programa Java generado accede a una cola de mensajes MQSeries remota, la conversión se produce en el invocante, de acuerdo con un conjunto de clases EGL invocadas durante la ejecución. Si el llamador accede a una plataforma remota que utiliza una página de códigos que es diferente de la página de códigos utilizada por el invocante, especifique una tabla de conversión en el elemento de asociación que hace referencia a la cola de mensajes MQSeries.
La tabla siguiente lista las tablas de conversión a las que puede acceder el código Java generado durante la ejecución. Cada nombre tiene el formato CSOcx:
c
Representa el juego de caracteres soportado en la plataforma invocada. Seleccione uno de los siguientes valores:
  • J para Java (si el programa llamado es un programa Java generado por EGL)
  • E para EBCDIC (si la plataforma llamada es un programa COBOL generado por EGL)
x
Representa el número de página de códigos de la plataforma invocada. Cada uno de los números se especifica en la publicación Character Data Representation Architecture Reference and Registry, SC09-2190. El registro identifica los juegos de caracteres soportados por las tablas de conversión.
La tabla siguiente lista las tablas de conversión a las que puede acceder el código Java generado durante la ejecución. Cada nombre tiene el formato CSOJx:
x
Representa el número de página de códigos de la plataforma invocada. Cada uno de los números se especifica en la publicación Character Data Representation Architecture Reference and Registry, SC09-2190. El registro identifica los juegos de caracteres soportados por las tablas de conversión.
Idioma Plataforma de programa invocado
UNIX Windows 2000/NT/XP z/OS UNIX System Services o iSeries Java z/OSiSeries COBOL
Árabe CSOJ1046 CSOJ1256 CSOJ420 CSOE420
Chino simplificado CSOJ1381 CSOJ1386 CSOJ1388 CSOE1388
Chino tradicional CSOJ950 CSOJ950 CSOJ1371 CSOE1371
Cirílico CSOJ866 CSOJ1251 CSOJ1025 CSOE1025
Danés CSOJ850 CSOJ850 CSOJ277 CSOE277
Europa del Este CSOJ852 CSOJ1250 CSOJ870 CSOE870
Inglés (Reino Unido) CSOJ850 CSOJ1252 CSOJ285 CSOE285
Inglés (Estados Unidos) CSOJ850 CSOJ1252 CSOJ037 CSOE037
Francés CSOJ850 CSOJ1252 CSOJ297 CSOE297
Alemán CSOJ850 CSOJ1252 CSOJ273 CSOE273
Griego CSOJ813 CSOJ1253 CSOJ875 CSOE875
Hebreo CSOJ856 CSOJ1255 CSOJ424 CSOE424
Japonés CSOJ943 CSOJ943 CSOJ1390 (Katakana SBCS), CSOJ1399 (Latino SBCS) CSOE1390 (Katakana SBCS), CSOE1399 (Latino SBCS)
Coreano CSOJ1363 CSOJ1363 CSOJ1364 CSOE1364
Portugués CSOJ850 CSOJ1252 CSOJ037 CSOE037
Español CSOJ850 CSOJ1252 CSOJ284 CSOE284
Sueco CSOJ850 CSOJ1252 CSOJ278 CSOE278
Alemán de Suiza CSOJ850 CSOJ1252 CSOJ500 CSOE500
Turco CSOJ920 CSOJ1254 CSOJ1026 CSOE1026
Idioma Plataforma de programa invocado
UNIX Windows 2000/NT/XP z/OS UNIX System Services o iSeries Java
Árabe CSOJ1046 CSOJ1256 CSOJ420
Chino simplificado CSOJ1381 CSOJ1386 CSOJ1388
Chino tradicional CSOJ950 CSOJ950 CSOJ1371
Cirílico CSOJ866 CSOJ1251 CSOJ1025
Danés CSOJ850 CSOJ850 CSOJ277
Europa del Este CSOJ852 CSOJ1250 CSOJ870
Inglés (Reino Unido) CSOJ850 CSOJ1252 CSOJ285
Inglés (Estados Unidos) CSOJ850 CSOJ1252 CSOJ037
Francés CSOJ850 CSOJ1252 CSOJ297
Alemán CSOJ850 CSOJ1252 CSOJ273
Griego CSOJ813 CSOJ1253 CSOJ875
Hebreo CSOJ856 CSOJ1255 CSOJ424
Japonés CSOJ943 CSOJ943 CSOJ1390 (Katakana SBCS), CSOJ1399 (Latino SBCS)
Coreano CSOJ949 CSOJ949 CSOJ1364
Portugués CSOJ850 CSOJ1252 CSOJ037
Español CSOJ850 CSOJ1252 CSOJ284
Sueco CSOJ850 CSOJ1252 CSOJ278
Alemán de Suiza CSOJ850 CSOJ1252 CSOJ500
Turco CSOJ920 CSOJ1254 CSOJ1026

Si no especifica un valor para la tabla de conversión en el componente de opciones de enlace al llamar a un programa desde Java, las tablas de conversión por omisión serán las correspondientes al Inglés de Estados Unidos.

Algoritmo de conversión

La conversión de datos de registros y estructuras se basa en las declaraciones de los elementos de estructura que no tienen subestructuras.

Los datos de tipo CHAR, DBCHAR o MBCHAR se convierten de acuerdo con los conjuntos de códigos ICONV (para la conversión que se produce durante la preparación de COBOL en z/OS) o de acuerdo con las tablas de conversión COBOL o Java (para la conversión que se produce en un invocante generado por EGL).

No se realiza ninguna conversión en los elementos de datos de relleno (elementos de datos sin nombre) ni en los elementos de datos de tipo DECIMAL, PACF, HEX o UNICODE.

En la conversión de EBCDIC a ASCII de datos de tipo MBCHAR, la rutina de conversión suprime los caracteres de desplazamiento a teclado ideográfico o a teclado estándar (SO/SI) e inserta un número de blancos equivalente al final del elemento de datos. En la conversión de ASCII a EBCDIC, la rutina de conversión inserta caracteres SO/SI alrededor de las series de doble byte y trunca el valor en el último carácter válido que cabe en el campo. Si el campo MBCHAR es un registro de longitud variable y el final del registro actual se encuentra en el campo MBCHAR, la longitud del registro se ajusta para reflejar la inserción o supresión de los caracteres SO/SI. La longitud del registro indica dónde finaliza el registro actual.

Para los elementos de datos de tipo BIN, la rutina de conversión invierte el orden de los bytes del elemento si la plataforma llamada o llamadora utiliza formato binario Intel y la otra plataforma no lo hace.

En los elementos de datos de tipo NUM o NUMC, la rutina de conversión convierte todos los bytes excepto el último mediante el algoritmo CHAR. El medio de byte de signo (el primer medio byte del último byte del campo) se convierte de acuerdo con los valores hexadecimales que aparecen en la tabla siguiente.

EBCDIC para el tipo NUM EBCDIC para el tipo NUMC ASCII
F (signo positivo) C 3
D (signo negativo) D 7
Condiciones de uso | Comentarios
(C) Copyright IBM Corporation 2000, 2005. Reservados todos los derechos.