Iniciar Sesión

Ver la Versión Completa : [Sintaxis] Error linea abrir archivo


JonathanDemons_123
29 de enero de 2024, 19:44
Buenas tardes:

Estoy aprendiendo cobol, estoy en leer un archivo, pero al querer leerlo, me sale el siguiente error:

953

Esta es la estructura de la linea, me sale el error cuando quiero imprimir la linea del 38 al 41, pienso que es porque en esa linea hay espacio en blanco:

50502121 MM01000000000922000268 B04B1688035B4426
50538000 MM01000000000127420265 AA15 B04B115850952110

Aprovechando otra duda??

Como se declara variables decimales, y como se asigna el valor, tomando como ejemplo estas lineas:

Asi tengo de ejemplo de declarar variable decimal, 05 DIGITOS PIC S9(12)V9(2).

50502121 MM01000000000922000268 B04B1688035B4426
50538000 MM01000000000127420265 AA15 B04B115850952110

Para las primeras lineas seria: 2.68 y la segunda 2.65, pero el como pasar a decimal, es que no lo he encontrado.


*-------------------------------------------------
IDENTIFICATION DIVISION.
*--------------------------------------------------
PROGRAM-ID. visorR3.
AUTHOR. A
DATE-WRITTEN. 2023
SECURITY. ============================================
============================================
*-------------------------------------------------------------------
ENVIRONMENT DIVISION.
*-------------------------------------------------------------------
CONFIGURATION SECTION.
SOURCE-COMPUTER. UNIX.
OBJECT-COMPUTER. UNIX.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT RTRES ASSIGN TO "./RR3DKBB.330"
ORGANIZATION IS LINE SEQUENTIAL.
*--------------------------------------------------------------
DATA DIVISION.
FILE SECTION.
FD RTRES.
01 REGISTRO.
05 TIPOREG PIC X(2).
05 R3 PIC X(156).
05 TIPOMOV PIC X(2).
05 CUENTA PIC X(5).
05 SOCIEDAD PIC X(4).
05 DIGITOS PIC S9(12)V9(2).
05 LUGAR PIC X(4).
05 CENT PIC X(5).
************************************************** ****************
WORKING-STORAGE SECTION.

01 FDR3.
05 WS-STUDENT-ID PIC 9(15).
05 WS-NAME PIC A(55).
01 FIN PIC A(1).
************************************************** ****************
PROCEDURE DIVISION.
************************************************** ****************
OPEN INPUT RTRES.
PERFORM UNTIL FIN='Y'
READ RTRES INTO FDR3
AT END MOVE 'Y' TO FIN
NOT AT END
IF FDR3(1:2) = "50" OR FDR3(1:2)= "40"
DISPLAY "LINEA"
MOVE FDR3(1:2) TO TIPOREG
DISPLAY TIPOREG
MOVE FDR3(10:13) TO SOCIEDAD
DISPLAY SOCIEDAD
MOVE FDR3(28:31) TO LUGAR
DISPLAY LUGAR
MOVE FDR3(32:36) TO CENT
DISPLAY CENT
DISPLAY FDR3(38:39)***********Esta linea es la que me marca error
END-IF
END-READ
END-PERFORM.
CLOSE RTRES.
STOP RUN.

Josber
29 de enero de 2024, 20:04
@JonathanDemons_123, con FDR3(38:39), le estás diciendo que de esa variable, empiece en la posición 38, y te muestre 39 posiciones más, (que hace un total de 77 posiciones, 38 + 39 = 77), la variable tuya, tiene un máximo de 70 posiciones, por lo que no te debe de funcionar, no sé que es lo que realmente quieres "displayar" pero cuando lo haces de esa manera, el formato es

VARIABLE (n:p)

donde n es donde quieres empezar y p es la cantidad de posiciones que quieres manejar

algunos compiladores, permiten la sintaxis como

VARIABLE (n: )

que significa, desde esa posición hasta el tamaño máximo de la variable (el definido en la WORKING, no el usado), pero ya te comento que no lo soportan todos los compiladores

No sé si me explico bien ...

En respuesta al tema de los decimales, COBOL, no almacena los decimales de ninguna manera, cuando tú guardas por ejemplo, la cifra 1234 en una variable definida como PIC S9(6), ésta se almacena como +001234, si le añades decimales, por ejemplo 1234,567 en una variable PIC S9(6)V999, la cifra se almacena como +001234567, realmente es "la máscara" definida en la PICTURE, la que le da la estructura al dato, lo más cerca que puedes estar para definirlo y que se almacene lo más "natural" posible es que le añadas la cláusula USAGE DISPLAY a la variable y, dependiendo de compilador que uses te lo hará bien o no.

Un salu2.-