Iniciar Sesión

Ver la Versión Completa : [Compilador] Compilacion erronea


dariodr
9 de mayo de 2022, 06:12
Hola amigos de nuevo por aca desempolvando mi rm/cobol85.
Tengo este codigo pero a la hora de compilar me aparece error en FUNCTION LENGTH.
Saludos.

IDENTIFICATION DIVISION.
PROGRAM-ID. LONGITUD.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LONGITUD PIC 99.
01 TEXTO PIC X(36)
VALUE "Sistema de Control de Calificaciones".
*
PROCEDURE DIVISION.
PRINCIPAL.
MOVE FUNCTION LENGTH(TEXTO) TO LONGITUD.
DISPLAY "La longitud de la cadena es:" LONGITUD.
STOP RUN.

Kuk
9 de mayo de 2022, 13:19
@dariodr, lo mismo tiene que ir en un COMPUTE y no en un MOVE ?

dariodr
9 de mayo de 2022, 15:21
Hola, he probado con COMPUTE y tambien da error.

Este es el error en rm/cobol85

JCantero
9 de mayo de 2022, 19:02
En RM/Cobol no existe ningun tipo "function".

Tienes que hacerlo con un bucle "perform" o con "string".

Aqui te adjunto el manual https://www.microfocus.com/documentation/rm-cobol/1215/RMC-LRM.pdf

---------- Post añadido el 9 de mayo de 2022 a las 19:21 ----------

Tienes un hilo del foro que habla de eso

[Aporte] Obtener la longitud del contenido de una variable - COBOL Foro (https://www.cobolforo.es/showthread.php?t=1169&highlight=POINTER)

---------- Post añadido el 9 de mayo de 2022 a las 19:28 ----------

Yo personalmente lo implemento con un perform

---------- Post añadido el 9 de mayo de 2022 a las 19:35 ----------


IDENTIFICATION DIVISION.
PROGRAM-ID. LONGITUD.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LONGITUD PIC 99.
01 TEXTO PIC X(36)
VALUE "Sistema de Control de Calificaciones".
*
PROCEDURE DIVISION.
PRINCIPAL.
perform varying longitud from 1 by 1 until
longitud = 36 or texto(longitud:) = ' '
continue
end-perform.

DISPLAY "La longitud de la cadena es:" LONGITUD.
STOP RUN.


Logicamente si la longitud de texto es mayor, por ejemplo 200, debemos de modificar 36 por 200

---------- Post añadido el 9 de mayo de 2022 a las 19:36 ----------


IDENTIFICATION DIVISION.
PROGRAM-ID. LONGITUD.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LONGITUD PIC 99.
01 TEXTO PIC X(200)
VALUE "Sistema de Control de Calificaciones".
*
PROCEDURE DIVISION.
PRINCIPAL.
perform varying longitud from 1 by 1 until
longitud = 200 or texto(longitud:) = ' '
continue
end-perform.

DISPLAY "La longitud de la cadena es:" LONGITUD.
STOP RUN.

dariodr
10 de mayo de 2022, 03:42
Gracias por la respuesta, lo pondre en practica.
Saludos.

Josber
10 de mayo de 2022, 09:20
A ver, ese bucle, tiene el problema de que en cuanto encuentre el primer espacio en blanco, para, por lo que, en este caso, en cuanto llegara al espacio en blanco que hay en el valor de la variable, después de "Sistema", se pararía. Tiene que ser un bucle inverso, que empiece por el final, hasta llegar al principio.


IDENTIFICATION DIVISION.
PROGRAM-ID. LONGITUD.
*
ENVIRONMENT DIVISION.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 LONGITUD PIC 99.
01 TEXTO PIC X(36)
VALUE "Sistema de Control de Calificaciones".
*
PROCEDURE DIVISION.
PRINCIPAL.
perform varying longitud from 36 by -1 until
longitud = 1 or texto(longitud:) not = ' '
continue
end-perform.

DISPLAY "La longitud de la cadena es:" LONGITUD.
STOP RUN.


Como te indican, si cambias el tamaño de la variable, cambias el bucle, (ten en ecuenta de mirar también la PICTURE del contador, que sea la apropiada)

Un salu2.-

Fito
10 de mayo de 2022, 16:23
Hola @Josber,

No, está bien asi como lo publicaron, Fijate de está analizando desde la posición hacia el final.

Lo único que cuando lo pasó para 200 caracteres, la variable LONGITUD quedó de 99 en vez de 999.

Saludos..

Fito...

JCantero
10 de mayo de 2022, 20:18
Hola @Josber,

No, está bien asi como lo publicaron, Fijate de está analizando desde la posición hacia el final.

Lo único que cuando lo pasó para 200 caracteres, la variable LONGITUD quedó de 99 en vez de 999.

Saludos..

Fito...

Si, llevas razón, puse un ejemplo pero sin percatarme de ello. Yo siempre utilizo variables grandes para estas cosas.


01 longitud 9(6).

Josber
13 de mayo de 2022, 10:12
¿Dónde ha ido a parar todo el código COBOL que había en éste post? ....

:flipa: :flipa: :flipa:

Kuk
13 de mayo de 2022, 11:31
@Josber, ha habido algún problema. Al editar vuelven a salir.... No sé, voy a ver...

Si veis algo así en otros posts, decídmelo.