Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   Cocina Casera (https://www.cobolforo.es/forumdisplay.php?f=47)
-   -   Obtener la longitud del contenido de una variable (https://www.cobolforo.es/showthread.php?t=1169)

Kuk 16 de junio de 2020 16:15

Obtener la longitud del contenido de una variable
 
Amigos, hay una maravilla en Cobol que muchos desconocen. Así que he pensado en compartirla.

En Fujitsu hay una función, que es la STORED-CHAR-LENGTH la que nos dice la longitud del valor de un campo. Pero en otros Cobol esta función no existe.

Pero lo que muchos no saben, es que el verbo STRING de Cobol puede decirnoslo si lo usamos con el añadido WITH POINTER! :yess:

Ejemplo:
Código COBOL:
  1.        IDENTIFICATION DIVISION.
  2.        PROGRAM-ID.    PROGRAM1.
  3.  
  4.        DATA DIVISION.
  5.        WORKING-STORAGE SECTION.
  6.        01  WS-A  PIC X(15) VALUE "ABCDE 12".
  7.        01  WS-C  PIC X(15).
  8.        
  9.        01  IDX-1 PIC 99 VALUE 1.
  10.        
  11.        PROCEDURE DIVISION.
  12.            
  13.            STRING WS-A
  14.                DELIMITED BY "  "
  15.                INTO WS-C
  16.                WITH POINTER IDX-1
  17.            
  18.            DISPLAY IDX-1
  19.            
  20.            GOBACK
  21.            .

En IDX-1 vamos a tener el número correspondiente al primer caracter "libre" después de haber realizado el STRING, o sea en el caso del ejemplo, vamos a tener un 9.

Con lo cual, la longitud del contenido siempre será IDX-1 - 1.

Evidentemente este ejemplo es para una cadena con espacios en medio (por eso en DELIMITED hay 2 espacios) pero se puede adaptar según necesitad.

Espero que sirva a alguien.

:hi:

Gusaiello 16 de junio de 2020 22:39

Yo hago algo parecido, pero previendo que entre medio de los datos útiles haya mas de un espacio mando cualquier cosa al final de la variable. Ejemplo :

Código COBOL:
  1. INSPECT WS-A REPLACING TRAILING SPACES BY "!"

Se que en esta variable no puede haber "!", de lo contrario reemplazo por cualquier otro caracter.
Y si necesito la variable como estaba al inicio :

Código COBOL:
  1. INSPECT WS-A REPLACING ALL "!" BY " "

Y todo queda como estaba.

Y en el puntero, como bien dice @Kuk, queda el número de caracteres útiles del campo.

JCantero 16 de junio de 2020 22:53

Gracias @Kuk

Rm/cobobl lo tiene
OpenCobol acabo de probarlo y tambien.

Nitzer 16 de junio de 2020 23:08

YO siempre utilizo STORED-CHAR-LENGTH , pero muchísimas veces :)

Kuk 17 de junio de 2020 09:48

El de Micro Focus no lo tiene (cosa que me parece muy rara porque el Cobol de MF es el más rico normalmente), y el de IBM para Mainframes tampoco.

Gusaiello 17 de junio de 2020 13:42

AcuCobol tampoco. Tiene funciones de todo tipo, pero esto no lo tiene.

Me refiero a la versión 5.1, no se si alguna posterior lo tendrá.

Pero bueno, con un par de pasitos extra se soluciona.

JCantero 17 de junio de 2020 23:21

Cita:

Citación del post de Gusaiello (Mensaje 5854)
AcuCobol tampoco. Tiene funciones de todo tipo, pero esto no lo tiene.

Me refiero a la versión 5.1, no se si alguna posterior lo tendrá.

Pero bueno, con un par de pasitos extra se soluciona.


Acucobol tambien lo lleva.

https://www.microfocus.com/documenta...00001S223.html


La version rm/cobol 5.35 con la cual yo empece hace 30 años (1990) ya lo llevaba.

"string" es un estandard (COBOL-85) y en todos los cobol esa caracteristica debe de llevarla integrada al menos si es compatible COBOL-85

Gusaiello 17 de junio de 2020 23:38

@JCantero, no me refería a STRING.

STRING viene de larga data.

Me refería a que Acu no tiene la forma de saber cuanto miden los datos útiles de una variable, y por eso hay que usar otros recursos.

JCantero 18 de junio de 2020 09:13

Cita:

Citación del post de Gusaiello (Mensaje 5857)
@JCantero, no me refería a STRING.

STRING viene de larga data.

Me refería a que Acu no tiene la forma de saber cuanto miden los datos útiles de una variable, y por eso hay que usar otros recursos.

Lo que ha puesto @Kuk al inicio del hilo este, para ver los datos útiles de esa forma, funciona en Acu.

Kuk 18 de junio de 2020 12:20

Cita:

Citación del post de JCantero (Mensaje 5858)
funciona en Acu

Debe de funcionar en cualquier Cobol.


La franja horaria es GMT +2. Ahora son las 16:28.

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