Iniciar Sesión

Ver la Versión Completa : [Sintaxis] STRING de varios campos separados por 1 espacio


jmeza
16 de enero de 2019, 22:52
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, Meza Moya Juan Martin
Lo correcto seria, Meza Moya Juan Martin

Roger
17 de enero de 2019, 16:49
WORKING STORAGE.
01 Nombres Pic x(25).
01 Paterno Pic x(15).
01 Materno Pic x(15).
01 NOMBRE PIC X(50).
PROCEDURE DIVISION.
MOVE SPACES TO NOMBRE.
STRING NOMBRES DELIMITED BY " "
" " DELIMITED BY SPACE
PATERNO DELIMITED BY " "
" " DELIMITED BY SPACE
MATERNO DELIMITED BY " "
INTO NOMBRE
END-STRING.

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.


WORKING STORAGE.
01 Nombres Pic x(25).
01 Paterno Pic x(15).
01 Materno Pic x(15).
01 NOMBRE PIC X(60).
01 ipaterno pic 99.
01 imaterno pic 99.
01 inombres pic 99.

PROCEDURE DIVISION.
perform varying inombres from 1 by 1 until inombres = 25 or nombres(inombres:) = ' '
continue
end-perform
perform varying ipaterno from 1 by 1 until ipaterno = 15 or paterno(ipaterno:) = ' '
continue
end-perform
perform varying imaterno from 1 by 1 until imaterno = 15 or materno(imaterno:) = ' '
continue
end-perform

****** montar dependiendo del tamaño de cada uno.
****** pero tienes que ver si el campo esta en blanco o totalmente ocupado.
****** ¡¡ un lio ¡¡


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


WORKING STORAGE.
01 Nombres Pic x(25).
01 Paterno Pic x(15).
01 Materno Pic x(15).
01 NOMBRE PIC X(60).
01 indice pic 99.
01 indicex pic 99.

PROCEDURE DIVISION.
move 1 to indice
initialize nombre
perform varying indicex from 1 by 1 until indicex > 15 or paterno(indicex:) = ' '
move paterno(indicex:1) to nombre(indice:1)
add 1 to indice
end-perform
add 1 to indice
perform varying indicex from 1 by 1 until indicex > 15 or materno(indicex:) = ' '
move materno(indicex:1) to nombre(indice:1)
add 1 to indice
end-perform
add 1 to indice
perform varying indicex from 1 by 1 until indicex > 25 or nombres(indicex:) = ' '
move nombres(indicex:1) to nombre(indice:1)
add 1 to indice
end-perform.

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



WORKING STORAGE.
01 Nombres Pic x(25).
01 Paterno Pic x(15).
01 Materno Pic x(15).
01 NOMBRE PIC X(60).
01 indice pic 99.
01 indicex pic 99.

PROCEDURE DIVISION.
move 1 to indice
initialize nombre
perform varying indicex from 1 by 1 until indicex > 15 or paterno(indicex:) = ' '
move paterno(indicex:1) to nombre(indice:1)
add 1 to indice
end-perform
add 1 to indice
perform varying indicex from 1 by 1 until indicex > 15 or materno(indicex:) = ' '
move materno(indicex:1) to nombre(indice:1)
add 1 to indice
end-perform
move ',' to nombre(indice:1)
add 2 to indice
perform varying indicex from 1 by 1 until indicex > 25 or nombres(indicex:) = ' '
move nombres(indicex:1) to nombre(indice:1)
add 1 to indice
end-perform.

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


WORKING STORAGE.
01 Nombres Pic x(25).
01 Paterno Pic x(15).
01 Materno Pic x(15).
01 NOMBRE PIC X(60).
01 l-nom pic 9(5).
01 l-pat pic 9(5).
01 l-mat pic 9(5).

PROCEDURE DIVISION.

compute l-nom = function stored-chat-length(nombres).
compute l-pat = function stored-chat-length(paterno).
compute l-mat = function stored-chat-length(materno).

move spaces to nombre.
string nombres(1:l-nom) delimited by size
" " delimited by size
paterno(1:l-pat) delimited by size
" " delimited by size
materno(1:l-mat) delimited by size
into nombre
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 ;)


string nombres(1:l-nom) " "
paterno(1:l-pat) " "
materno(1:l-mat)
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...