miércoles, 24 de julio de 2013

Cobol: conversiones entre tipos de datos (2)

Supongamos que tenemos un fichero de entrada en el que uno de los campos, por ejemplo REG-E-IMPORTE, es un PIC X(15) y representa un importe de 13 posiciones enteras y 2 posiciones decimales. ¿Qué tendríamos que hacer para convertir dicho campo a un PIC S9(13)V9(2) USAGE COMP-3?

Es muy sencillo y muy fácil. En un programa que he realizado recientemente (y que está probado) he declarado en working las siguientes variables:

          01 WS-IMP1                                 PIC X(15).             
          01 WS-IMP1-N REDEFINES WS-IMP1      PIC 9(15).             
          01 WS-IMP1-AUX                        PIC 9(15) VALUE ZEROES.
          01 WS-IMP-AMORT-PRINC       PIC S9(13)V9(02).      

En el programa, en donde corresponda, tendríamos que codificar lo siguiente:

          MOVE REG-E-IMPORTE               TO WS-IMP1                 

          MOVE WS-IMP1-N                        TO WS-IMP1-AUX             

          MOVE WS-IMP1-AUX(1:13)        TO WS-IMP-AMORT-PRINC(1:13)

          MOVE WS-IMP1-AUX(14:2)        TO WS-IMP-AMORT-PRINC(14:2)



Pues esto es todo lo que hay que hacer. A lo mejor te preguntarás: pero, ¿qué sucede si el campo REG-E-IMPORTE es un PIC X(13) y tenemos que convertirlo a un PIC S9(13)V9(2) USAGE COMP-3? Pues muy sencillo. Tanto la longitud de WS-IMP1 como la de WS-IMP1-N sería 13 mientras la definición de WS-IMP1-AUX y WS-IMPO-AMORT-PRINC sería exactamente a la indicada anteriormente. En cuanto al código, sería exactamente el mismo que el indicado anteriormente.

No hay comentarios:

Publicar un comentario