Cobol Foro
Navegación en el Foro
Retroceder   Cobol Foro Entornos de desarrollo y compiladores Cobol Cocina Casera
Cocina Casera Código para diferentes compiladores, creado por nuestros foreros, probado y listo para usar.
 
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Sintaxis] Máximo valor de una variable Begoguay COBOL - General 6 4 de mayo de 2020 19:46
[Sintaxis] Traspasar el valor de una variable jmeza PowerCOBOL (ActiveX, v4 - v11) 2 30 de mayo de 2019 01:20
Tablas bidimensionales de longitud variable Kuk Cocina MicroFocus 2 23 de mayo de 2018 11:13
[Sintaxis] Informar variable JCL con contenido de fichero. RaulC JCL y utilidades 9 4 de abril de 2018 20:47
[Sintaxis] Obtener una ruta en Red Roger PowerCOBOL (ActiveX, v4 - v11) 16 1 de mayo de 2015 22:40

Respuesta

  #1
Antiguo 16 de junio de 2020, 16:15
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207
Divertido Obtener la longitud del contenido de una variable
2 Inactivo Inactivo

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!

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.




NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #2
Antiguo 16 de junio de 2020, 22:39
Gusaiello
Forero Activo
Concurso: Segundo puesto: Ganador/a del Segundo puesto en un concurso - Issue reason: Generador de código QR encriptado Activista del Foro: Activista del Foro - Issue reason: Por aportar ejecrcicios para los novatos 
Última Actividad 17.09.2026 14:29
Posts Posts: 236
Likes enviados Enviados: 150
Likes recibidos Recibidos: 139

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.
Gusaiello is offline   Responder Con Cita
  #3
Antiguo 16 de junio de 2020, 22:53
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

Gracias @Kuk

Rm/cobobl lo tiene
OpenCobol acabo de probarlo y tambien.
JCantero is offline   Responder Con Cita
  #4
Antiguo 16 de junio de 2020, 23:08
Nitzer
Guru de COBOL
Activista del Foro: Activista del Foro - Issue reason: Por Videoconferencia-Webinar Guru de los Gurus: Por solidos y amplios conocimientos - Issue reason: Por aportar conocimientos excepcionales 
Última Actividad 05.08.2026 17:33
Posts Posts: 200
Likes enviados Enviados: 70
Likes recibidos Recibidos: 157

YO siempre utilizo STORED-CHAR-LENGTH , pero muchísimas veces
Nitzer is offline   Responder Con Cita
  #5
Antiguo 17 de junio de 2020, 09:48
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

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.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
  #6
Antiguo 17 de junio de 2020, 13:42
Gusaiello
Forero Activo
Concurso: Segundo puesto: Ganador/a del Segundo puesto en un concurso - Issue reason: Generador de código QR encriptado Activista del Foro: Activista del Foro - Issue reason: Por aportar ejecrcicios para los novatos 
Última Actividad 17.09.2026 14:29
Posts Posts: 236
Likes enviados Enviados: 150
Likes recibidos Recibidos: 139

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.
Gusaiello is offline   Responder Con Cita
  #7
Antiguo 17 de junio de 2020, 23:21
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

Citación del post de Gusaiello Ver Mensaje
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
JCantero is offline   Responder Con Cita
  #8
Antiguo 17 de junio de 2020, 23:38
Gusaiello
Forero Activo
Concurso: Segundo puesto: Ganador/a del Segundo puesto en un concurso - Issue reason: Generador de código QR encriptado Activista del Foro: Activista del Foro - Issue reason: Por aportar ejecrcicios para los novatos 
Última Actividad 17.09.2026 14:29
Posts Posts: 236
Likes enviados Enviados: 150
Likes recibidos Recibidos: 139

@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.
Gusaiello is offline   Responder Con Cita
  #9
Antiguo 18 de junio de 2020, 09:13
JCantero
El Foro es mi casa
Activista del Foro: Activista del Foro - Issue reason: Por participación activa Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Issue reason: Por muchos agradecimientos de parte de los Foreros 
Última Actividad 02.09.2026 00:15
Posts Posts: 442
Likes enviados Enviados: 167
Likes recibidos Recibidos: 269

Citación del post de Gusaiello Ver Mensaje
@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.
JCantero is offline   Responder Con Cita
  #10
Antiguo 18 de junio de 2020, 12:20
Kuk
Administrador
Última Actividad 19.09.2026 20:11
Posts Posts: 2.500
Likes enviados Enviados: 1037
Likes recibidos Recibidos: 1207

Citación del post de JCantero Ver Mensaje
funciona en Acu
Debe de funcionar en cualquier Cobol.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk is offline   Responder Con Cita
Respuesta


Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado

Saltar a Foro


La franja horaria es GMT +2. Ahora son las 14:03.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.