[COBOL] eliminación de 0 a la edición

didiche -  
 didiche -
Hola,

Tengo un problema para editar una zona sin los ceros delante.
Verás,
una zona pic X(25) para colocar en una zona 9(7)V99. (por ejemplo 0000002,50)
Hasta aquí funciona.
Luego para editar esta zona 9(7)V99 en Z(6)9V99, ya no funciona porque obtengo:
2<0,5 (o algo así ya no lo recuerdo).
¿Cómo debo hacer?

gracias.
JG

Configuración: Windows XP / Firefox 5.0

5 respuestas

  1. cchristian Mensajes publicados 928 Estado Miembro 131
     
    Hola,

    La PICTURE de edición (Z(6)9V99) probablemente debe definirse con una coma Z(6)9,99 (o un punto conforme a la cláusula DECIMAL POINT de la sección SPECIAL-NAMES) en lugar de una marca decimal virtual (V).

    Cordialmente.
    Cchristian.
    0
    1. didiche
       
      Hola, He puesto efectivamente Special-Names. El punto decimal es coma. Mi imagen de edición es bien Z(6)9,99 (en lugar de V) pero no funciona, me muestra lo que decía. Así que no lo entiendo. Debo estar mal programando en algún momento, no sé. ¿Puedes proporcionarme un modelo de programación? Gracias. Atentamente
      0
  2. cchristian Mensajes publicados 928 Estado Miembro 131
     
    Una zona pic X(25) para colocar en una zona 9(7)V99. (por ejemplo 0000002,50)
    Hasta aquí funciona.


    Creo que el problema está relacionado con el hecho de que mueves de PIC X... a PIC 9V... y además de X(25) (te recuerdo por cierto que COBOL sólo acepta 18 dígitos en punto fijo para una zona numérica. Supondría que hay truncamiento a la izquierda de la zona receptora del valor X(25). También es sorprendente que el compilador no haya reaccionado.
    Si puedes redefinir tu zona emisora de X(25) y SI estás seguro de que está rellena al menos en sus últimas 9 posiciones con dígitos (0 a 9) prueba esto:

    01 ZONA-EMIT PIC X(25).
    01 RED-ZONA-EMIT REDEFINES ZONA-EMIT.
    05 FILLER PIC X(16).
    05 ZONA-NUM PIC 9(07)V99.

    Luego mueves ZONA-NUM a la zona receptora PIC 9(7)V99.

    MOVE ZONA-NUM TO ZONA-RECEPT.

    Atentamente.
    Cchristian.
    0
    1. didiche
       
      Gracias,
      Intento el lunes y te lo digo de nuevo.
      0
  3. cchristian Mensajes publicados 928 Estado Miembro 131
     
    OK, hasta el lunes,

    --
    Con cordialidad.
    Cchristian.
    0
    1. didiche
       
      Hola, Bueno, vaya, no funciona, no lo entiendo. Probé el ejemplo que me diste, y es como si (de hecho es así), la zona numérica se va al PIC X(16)??? ¡Entonces mi zona de salida queda en cero! Cuando dices "Luego mueves ZONE-NUM en la zona receptora PIC 9(7)V99" ¿quieres decir en la zona ZZZZZZ9,99 (ZONE-RECEPT)? ¿Es eso? Gracias
      0
  4. cchristian Mensajes publicados 928 Estado Miembro 131
     
    Buenas noches,

    Aquí tienes una solución probada del problema que funciona en mi entorno:

    IDENTIFICATION DIVISION.
    PROGRAM-ID. TESTCOB.
    ENVIRONMENT DIVISION.
    CONFIGURATION SECTION.
    SPECIAL-NAMES. DECIMAL-POINT IS COMMA.
    DATA DIVISION.
    FILE SECTION.

    WORKING-STORAGE SECTION.

    01 ZONE-EMET PIC X(25) VALUE '0123456789012345678901234'.
    01 RED-ZONE-EMET REDEFINES ZONE-EMET.
    05 FILLER1 PIC X(16).
    05 ZONE-NUM PIC 9(07)V99.

    01 ZONE-RECEPT PIC ZZZZZZ9,99.

    PROCEDURE DIVISION.
    DEBUT.
    MOVE ZONE-NUM TO ZONE-RECEPT
    DISPLAY ' ZONE-RECEPT : ', ZONE-RECEPT UPON CONSOLE.
    * El resultado es: 6789012,34

    MOVE "<span style="white-space:pre">(15 espaces)</span>0000012346" TO ZONE-EMET.
    MOVE ZONE-NUM TO ZONE-RECEPT
    DISPLAY ' ZONE-RECEPT : ', ZONE-RECEPT UPON CONSOLE.
    * El resultado es: 123,46.

    STOP RUN.
    END-PGM.
    --
    Cordialement.
    Cchristian.
    0