Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   Fujitsu COBOL (https://www.cobolforo.es/forumdisplay.php?f=77)
-   -   [Sintaxis] STRING de varios campos separados por 1 espacio (https://www.cobolforo.es/showthread.php?t=944)

jmeza 16 de enero de 2019 22:52

STRING de varios campos separados por 1 espacio
 
Hola, podrían ayudar con lo siguiente:
Tengo un registro donde guardo los nombres de trabajadores y están separado por
Nombres Pic x(25)
Paterno Pic x(15)
Materno Pic x(15)
Como puedo hacer para imprimir que solo imprima los caracteres con información y no los espacios en blanco, que solo muestre un espacio en blanco entre cada campo.
Ejemplo actual me imprime asi, Meza Moya Juan Martin
Lo correcto seria, Meza Moya Juan Martin


Si me pueden ayudar con esto
Saludos[COLOR="Silver"]

Ejemplo actual me imprime asi,
Código:

Meza          Moya          Juan Martin
Lo correcto seria,
Código:

Meza Moya Juan Martin

Roger 17 de enero de 2019 16:49

Código COBOL:
  1. WORKING STORAGE.
  2. 01 Nombres Pic x(25).
  3. 01 Paterno Pic x(15).
  4. 01 Materno Pic x(15).
  5. 01 NOMBRE PIC X(50).
  6. PROCEDURE DIVISION.
  7.      MOVE SPACES TO NOMBRE.
  8.      STRING NOMBRES DELIMITED BY "  "
  9.                  " " DELIMITED BY SPACE
  10.                  PATERNO DELIMITED BY "  "
  11.                  " " DELIMITED BY SPACE
  12.                  MATERNO DELIMITED BY "  "
  13.                  INTO NOMBRE
  14.        END-STRING.
  15.  
  16.        MOVE NOMBRE TO IMPRESION.

OJO SOLO EN LOS NOMBRES APELLIDOS DELIMTED BY " " PON DOS O TRES ESPACIOS PARA LOS NOMBRES COMPUESTOS O APELLIDOS EJEMPLO "DEL CARPIO" " DE LAS CASAS".

JCantero 17 de enero de 2019 19:31

Si quieres tener en cuenta los nombre y apellidos compuestos tienes que analizar cada cada campo y montar despues como indica Roger.

Código COBOL:
  1. WORKING STORAGE.
  2. 01 Nombres Pic x(25).
  3. 01 Paterno Pic x(15).
  4. 01 Materno Pic x(15).
  5. 01 NOMBRE PIC X(60).
  6. 01 ipaterno pic 99.
  7. 01 imaterno pic 99.
  8. 01 inombres pic 99.
  9.  
  10. PROCEDURE DIVISION.
  11.      perform varying inombres from 1 by 1 until inombres = 25 or nombres(inombres:) = '  '
  12.          continue
  13.      end-perform
  14.      perform varying ipaterno from 1 by 1 until ipaterno = 15 or paterno(ipaterno:) = '  '
  15.          continue
  16.      end-perform
  17.      perform varying imaterno from 1 by 1 until imaterno = 15 or materno(imaterno:) = '  '
  18.          continue
  19.      end-perform
  20.  
  21.  ****** montar dependiendo del tamaño de cada uno.
  22. ****** pero tienes que ver si el campo esta en blanco o totalmente ocupado.
  23. ****** ¡¡ un lio ¡¡

Creo que lo mejor es ir montandolo sobre la marcha y evitar un monton de condiciones.
Quedaria asi:

Código COBOL:
  1. WORKING STORAGE.
  2. 01 Nombres Pic x(25).
  3. 01 Paterno Pic x(15).
  4. 01 Materno Pic x(15).
  5. 01 NOMBRE PIC X(60).
  6. 01 indice pic 99.
  7. 01 indicex pic 99.
  8.  
  9. PROCEDURE DIVISION.
  10.      move 1 to indice
  11.      initialize nombre
  12.      perform varying indicex from 1 by 1 until indicex > 15 or paterno(indicex:) = '  '
  13.          move paterno(indicex:1) to nombre(indice:1)
  14.          add 1 to indice
  15.      end-perform
  16.      add 1 to indice
  17.      perform varying indicex from 1 by 1 until indicex > 15 or materno(indicex:) = '  '
  18.          move materno(indicex:1) to nombre(indice:1)
  19.          add 1 to indice
  20.      end-perform
  21.      add 1 to indice
  22.      perform varying indicex from 1 by 1 until indicex > 25 or nombres(indicex:) = '  '
  23.          move nombres(indicex:1) to nombre(indice:1)
  24.          add 1 to indice
  25.      end-perform.
  26.  
  27. ***** en nombre lo tienes perfectamente montado.    


---------- Post añadido : 19:31 ---------- Post anterior : 19:21 ----------

Si quieres dejarlo asi (con una coma antes del nombre): Meza Moya, Juan Martin


Código COBOL:
  1. WORKING STORAGE.
  2. 01 Nombres Pic x(25).
  3. 01 Paterno Pic x(15).
  4. 01 Materno Pic x(15).
  5. 01 NOMBRE PIC X(60).
  6. 01 indice pic 99.
  7. 01 indicex pic 99.
  8.  
  9. PROCEDURE DIVISION.
  10.      move 1 to indice
  11.      initialize nombre
  12.      perform varying indicex from 1 by 1 until indicex > 15 or paterno(indicex:) = '  '
  13.          move paterno(indicex:1) to nombre(indice:1)
  14.          add 1 to indice
  15.      end-perform
  16.      add 1 to indice
  17.      perform varying indicex from 1 by 1 until indicex > 15 or materno(indicex:) = '  '
  18.          move materno(indicex:1) to nombre(indice:1)
  19.          add 1 to indice
  20.      end-perform
  21.      move ',' to nombre(indice:1)
  22.      add 2 to indice
  23.      perform varying indicex from 1 by 1 until indicex > 25 or nombres(indicex:) = '  '
  24.          move nombres(indicex:1) to nombre(indice:1)
  25.          add 1 to indice
  26.      end-perform.
  27.  
  28. ***** en nombre lo tienes perfectamente montado.    

jmeza 18 de enero de 2019 15:27

Agradecido por su ayuda

Saludos

Fito 22 de enero de 2019 01:39

Hola:

Otra opción:

Código COBOL:
  1. WORKING STORAGE.
  2. 01 Nombres Pic x(25).
  3. 01 Paterno Pic x(15).
  4. 01 Materno Pic x(15).
  5. 01 NOMBRE  PIC X(60).
  6. 01 l-nom      pic 9(5).
  7. 01 l-pat      pic 9(5).
  8. 01 l-mat      pic 9(5).
  9.  
  10. PROCEDURE DIVISION.
  11.  
  12. compute l-nom = function stored-chat-length(nombres).
  13. compute l-pat = function stored-chat-length(paterno).
  14. compute l-mat = function stored-chat-length(materno).
  15.  
  16. move spaces        to nombre.
  17. string nombres(1:l-nom)     delimited by size
  18.          " "                delimited by size
  19.          paterno(1:l-pat)   delimited by size
  20.          " "                delimited by size
  21.          materno(1:l-mat)   delimited by size
  22.     into nombre
  23. end-string.

Saludos.

Fito...

Kuk 22 de enero de 2019 21:09

Fito, puedes reducir el tamaño del código poniendo DELIMITED una sol vez ;)

Código COBOL:
  1. string nombres(1:l-nom) " "
  2.          paterno(1:l-pat) " "
  3.          materno(1:l-mat)  
  4.     delimited by size into nombre

Fito 25 de enero de 2019 00:38

Seguro KUK, lo que pasa es que lo copié de uno de tengo con distintas delimitaciones.

Saludos.

Fito...


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

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