Cobol - Variable alfanumérica

   
Vista:

Variable alfanumérica

Publicado por Cobol1 (2 intervenciones) el 04/12/2008 12:53:39
Hola, me gustaría que me indicarais si hay alguna forma de eliminar los espacios a la derecha de una variable alfanumérica al moverla a otra del mismo tipo y longitud.

Muchas Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Variable alfanumérica

Publicado por SuperIndio (138 intervenciones) el 04/12/2008 13:46:11
No señor, si:

01 W-NI-EN-PEDO PIC X(30) VALUE "ESTO ES COBOL".

a partir del caracter 14 inclusive en adelante tendra SPACES o como vos decis
espacios en blancos,
en cobol no existe la posibilidad de LTRIM() ni RTRIM() u ALLTRIM().
A menos que la crees, diseñando un algoritmo.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variable alfanumérica

Publicado por Cobol1 (2 intervenciones) el 05/12/2008 09:17:12
Es lo que me temía. Supongo que tendría que recorrer la variable, y aún así, como la variable "receptora" de la información tiene el mismo tamaño que la variable "origen", el problema seguiría estando ahí.

De todas formas, muchas gracias por confirmar mis sospechas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variable alfanumérica

Publicado por SuperIndio (138 intervenciones) el 05/12/2008 13:46:54
Exacto!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variable alfanumérica

Publicado por Jose Ramon Castelo (11 intervenciones) el 09/12/2008 13:21:41
Hola,

No entiendo muy bien el problema, si la variable receptora es del mismo tamaño, se queda con todo el contenido de la de origen, ¿no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variable alfanumérica

Publicado por SuperIndio (138 intervenciones) el 09/12/2008 19:29:16
Por supuesto

Te explico lo que esta planteando el Sr es que desea eliminar los espacios o blancos de la derecha de una variable alfanumerica Una especie de funcion de RTRIM()
Si yo tengo

01 W-ORIGEN PIC X(20) VALUE 'COBOLERO'.
01 W-DESTINO PIC X(20).

(W-ORIGEN) In This case a partir de la posicion 9 inclusive el resto contendrá spaces
y si yo lo muevo a: W-DESTINO esta contendra spaces aunque mueva caracter por caracter

En realidad hay una forma de tratar pero es muy rebuscada y muy poco practica y se trata de redefinir la variable Origen tantas veces como longitud tenga la misma y a su cada redefinicion dividirla en 2 partes (A y B) ambas iran creciendo y decreciendo su longitud o tamaño al mismo tiempo en cada redefinicion. Luego en el tratamiento deberás checkar el ultimo caracter que no sea blanco o espacio y deberas evaluar a que redefinicion corresponde y entonces debera mover LOW-VALUES (NIL o NULL) a la parte B de esa redefinicion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variable alfanumérica

Publicado por Jose Ramon Castelo (11 intervenciones) el 10/12/2008 12:13:03
Ok, aclarado.

Una solución podría ser recorrer la cadena con un bucle PERFORM y después mover ese trozo.
en la WORKING
77 CONTADOR PIC 9(3) VALUE ZEROES.
77 TOPE PIC 9(1) VALUE ZEROES.

en la PROCEDURE.

MOVE 0 TO TOPE.
PERFORM VARYING CONTADOR FROM <longitud_maxima_cadena> BY -1
UNTIL CONTADOR < 1
OR TOPE = 1
IF CADENA(CONTADOR:1) NOT = SPACES
MOVE 1 TO TOPE
END-IF
END-PERFORM.
ADD 1 TO CONTADOR.

De esta forma en la variable CONTADOR tendria la longitud máxima de la cadena para moverla sería:

MOVE CADENA(1:CONTADOR) TO OTRACADENA(<desde_posicion>:CONTADOR).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variable alfanumérica

Publicado por SuperIndio (138 intervenciones) el 10/12/2008 16:38:50
A ver
01 CADENA PIC X(10) VALUE "COBOL"
01 OTRACADENA PIC X(10).

Luego de tu algoritmo quedaria
CONTADOR=6
y el MOVE seria

MOVE CADENA(1:6) TO OTRACADENA(1:CONTADOR).

Y OTRACADENA queradia con el valor "COBOL" + 4 ESPACIOS o BLANCOS (SPACES)

Mover solo los caracteres rellenos no significa que variable
receptora reciba solo la longitud movida,
por defecto el resto se completa con SPACES

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variable alfanumérica

Publicado por Jose Ramon Castelo (11 intervenciones) el 10/12/2008 20:58:33
Hola de nuevo,

Al hacer el MOVE de un trozo de la cadena CADENA(1:6) a OTRACADENA(1:6) lo que haces es sustituir únicamente los primeros 6 caracteres de OTRACADENA con los los 6 primeros caracteres de CADENA, efectivamente si no hicieras esto rellenaria el resto de la cadena con espacios.

Es decir, por ejemplo:

77 CADENA PIC X(10) VALUE "COBOL".
77 CADENA2 PIC X(14) VALUE "LA OTRA CADENA".
77 CONTADOR PIC 9(2) VALUE ZEROES.

Despues del algoritmo, el valor de CONTADOR sería 5.

Si hago:
MOVE CADENA(1:5) TO CADENA2.

CADENA2 quedaría con "COBOL"+9 espacios.

Pero si hago:
MOVE CADENA(1:5) TO CADENA2(1:5)

CADENA2 quedaria con "COBOLRA CADENA".

Esto a mi me funciona al menos en RM/COBOL para Unix.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Variable alfanumérica

Publicado por Luis Salinas (83 intervenciones) el 16/12/2008 16:52:00
En el caso que quieras eliminar espacios para formar oraciones con fracciones de textos o datos que vienen en ungrupo o una variavle de mayor tanano a la informacion que tra podrias utilizar un STRING y seria asi.
77 W-FRSTNAME PIC X)(30)
77 W-LASTNAME PIC X(30)
77 W-RESULTADO PIC X (30).

POR EJEMPLO

LUIS
SALINAS

Y QUIERES QUE QUEDE LUIS SALINAS

SERIA ASI.:

STRING W-LASNAME, "?", W-LASTNAME DELIMITED BY SPACES,
INTO W-RESULTADO,
END-STRING,

COMPO PUEDES VER ESTOY DELIMITANDO POR ESPACIOS ESTO ES QUE DONDE ENCUENTRE ESPACIOS EN CADA VARIUABLE LOS ELIMINA Y POR TAL RAZON METO UN CARACTER ? ENTRE EL NOMBRE Y APELLIDO PARA SEPARARLO DESPUES REEMPLAZANDO ESTE CARATER POR UN ESPACIO CON LA SIG. INSTRUCCION

INSPECT REG-VIRTUAL REPLACING ALL "?" BY SPACES
TAMBIEN PUEDES ARMAR DELIMITANDO CON EL SIZE E INCLUSO CON CARACTERES ESPECIALES O PERSONALIZADOS.

ESPERO TE SIRVA

lUIS.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar