Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   RM/COBOL (https://www.cobolforo.es/forumdisplay.php?f=16)
-   -   [Compilador] Compilacion erronea (https://www.cobolforo.es/showthread.php?t=1487)

dariodr 9 de mayo de 2022 06:12

Compilacion erronea
 
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.

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. LONGITUD.
  3.      *
  4.        ENVIRONMENT DIVISION.
  5.      *
  6.        DATA DIVISION.
  7.        WORKING-STORAGE SECTION.
  8.        01  LONGITUD  PIC 99.
  9.        01  TEXTO     PIC X(36)
  10.                      VALUE "Sistema de Control de Calificaciones".
  11.      *
  12.        PROCEDURE DIVISION.
  13.        PRINCIPAL.
  14.            MOVE FUNCTION LENGTH(TEXTO) TO LONGITUD.
  15.            DISPLAY "La longitud de la cadena es:" LONGITUD.
  16.            STOP RUN.
  17.            
  18.                        

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

1 Archivos Adjunto(s)
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/documenta...15/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

---------- 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 ----------

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. LONGITUD.
  3.      *
  4.        ENVIRONMENT DIVISION.
  5.      *
  6.        DATA DIVISION.
  7.        WORKING-STORAGE SECTION.
  8.        01  LONGITUD  PIC 99.
  9.        01  TEXTO     PIC X(36)
  10.                      VALUE "Sistema de Control de Calificaciones".
  11.      *
  12.        PROCEDURE DIVISION.
  13.        PRINCIPAL.
  14.            perform varying longitud from 1 by 1 until
  15.                  longitud = 36 or texto(longitud:) = ' '
  16.               continue
  17.            end-perform.
  18.  
  19.            DISPLAY "La longitud de la cadena es:" LONGITUD.
  20.            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 ----------

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. LONGITUD.
  3.      *
  4.        ENVIRONMENT DIVISION.
  5.      *
  6.        DATA DIVISION.
  7.        WORKING-STORAGE SECTION.
  8.        01  LONGITUD  PIC 99.
  9.        01  TEXTO     PIC X(200)
  10.                      VALUE "Sistema de Control de Calificaciones".
  11.      *
  12.        PROCEDURE DIVISION.
  13.        PRINCIPAL.
  14.            perform varying longitud from 1 by 1 until
  15.                  longitud = 200 or texto(longitud:) = ' '
  16.               continue
  17.            end-perform.
  18.  
  19.            DISPLAY "La longitud de la cadena es:" LONGITUD.
  20.            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.

Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID. LONGITUD.
  3.      *
  4.        ENVIRONMENT DIVISION.
  5.      *
  6.        DATA DIVISION.
  7.        WORKING-STORAGE SECTION.
  8.        01  LONGITUD  PIC 99.
  9.        01  TEXTO     PIC X(36)
  10.                      VALUE "Sistema de Control de Calificaciones".
  11.      *
  12.        PROCEDURE DIVISION.
  13.        PRINCIPAL.
  14.            perform varying longitud from 36 by -1 until
  15.                  longitud = 1 or texto(longitud:) not = ' '
  16.               continue
  17.            end-perform.
  18.  
  19.            DISPLAY "La longitud de la cadena es:" LONGITUD.
  20.            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

Cita:

Citación del post de Fito (Mensaje 7799)
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.

Código COBOL:
  1.                  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.


La franja horaria es GMT +2. Ahora son las 13:54.

Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.