PDA

Ver la Versión Completa : [Sintaxis] Eliminar Retorno de Carro/Salto de líena


Josber
9 de junio de 2016, 20:47
Quiero cambiar el retorno de carro de una variable por un espacio, hace tiempo lo hice con un INSPECT y no encuentro donde lo usé, y ahora no lo consigo, he probado con


INSPECT ARTDESL REPLACING ALL X"0A" BY " ".


y con


INSPECT ARTDESL REPLACING ALL X"0D" BY " ".


No funciona de ninguna de las dos maneras, alguna ayuda, porfa ...

Muchas gracias.-

Kuk
9 de junio de 2016, 21:27
Josber, en Windows es de 2 bytes:

INSPECT ARTDESL REPLACING ALL X"0D0A" BY X"2020".

En este caso el INSPECT exige que la longitud del BY sea la misma que la de REPLACING. Si quieres reemplazar con 1 sólo espacio, haz un bucle.

Adrianeloy
9 de junio de 2016, 21:29
A mi me funciona correctamente, Josber, tanto con "0D" como con "0A"... Fijate si el caracter a reemplazar no tiene otro valor distinto a esos dos.
Es una variable compuesta? Probá moverla a una variable PIC X(256) e intentalo nuevamente...

Josber
10 de junio de 2016, 10:31
Kuk, Nada, no hay manera, el caso es que he encontrado donde tenía la otra instrucción, que es como la segunda que he puesto, y funciona perfectamente.

Kuk
10 de junio de 2016, 10:42
Nada, no hay manera
Quieres decir que no te funciona incluso con el INSPECT que tenías hecho antes y te funcionaba? :piensa: Estás seguro de que no funciona? Dónde DISPLAYas dicha variable? Si es en un CmStatic centrado o un CmEdit von vScroll activado, puede que haya funcionado pero estos controles hacen salto de línea automáticamente.

Por cierto, no tendrás campos COMP-3 en dicha variable?

Josber
10 de junio de 2016, 12:38
No Kuk, es un campo con PIC X(300), que exporto a un fichero de texto plano, junto con otros campos, el problema está en que si lleva algún CR+LF, descuadra todo el fichero de exportación. El texto viene de un campo TextBox vulgar y corriente.

Un saludo.-

Kuk
10 de junio de 2016, 12:57
Josber, haz el bucle siguiente y me dices si ha funcionado o no:


WORKING-STORAGE SECTION.
01 CAMPO PIC X(300).
01 IDX-1 PIC 9(3).
PROCEDURE DIVISION.

MOVE 1 TO IDX-1

PERFORM UNTIL IDX-1 > 300
IF CAMPO(IDX-1:2) = X"0D0A"
MOVE CAMPO(IDX-1 + 2:) TO CAMPO(IDX-1 + 1:)
MOVE SPACES TO CAMPO(IDX-1:1)
END-IF

IF CAMPO(IDX-1:1) = X"0D" OR
CAMPO(IDX-1:1) = X"0A"
MOVE SPACES TO CAMPO(IDX-1:1)
END-IF

ADD 1 TO IDX-1
END-PERFORM



Lo he probado con:


MOVE "ABDCE" & X"0D0A" & "FGH" & X"0D" & "IJKLM" & X"0A" & "NOP" TO CAMPO


Y aquí tienes la prueba de que funciona. ;)

Josber
12 de junio de 2016, 17:57
Kuk, Ahora funciona de las dos maneras, manda webos ..., he puesto tu rutina en un sitio de los dos en las que tenía que ponerlo y funciona, y en el otro sitio, donde está la rutina de siempre, con otra variable, ahora funciona, sin tocar nada, cosas de brujería, así es que lo dejo como está y "pa'lante".

Un saludo.-

Kuk
13 de junio de 2016, 13:39
Josber, por lo que he visto, al Make se le va a veces la pinza. Por ello, cuando ves que algo evidente no funciona, haz Build y no Make.

Josber
13 de junio de 2016, 15:17
haz Build y no Make, suelo hacer un Make siempre, pero da la casualidad que a éste proyecto, le hice un ReBuild All, porque había cambiado una cosa en los ficheros y como estan en un #INCLUDE, necesitaba hacerlo, y todo ello después de insertar mi rutina, así es que la conclusión final, es que de vez en cuando, el compilador hace lo que le sale de los nísperos...

Un saludo.-