PDA

Ver la Versión Completa : [Sintaxis] Lectura archivo secuencial


Gatomalo
23 de agosto de 2018, 15:56
Hola Amigos estoy migrando un archivo excel a un archivo plano de ahi a powercobol tengo dificultad al leer un archivo secuencial con mas de 50 caracteres la linea de lectura es la siguiente:
000002&09/06/15&TBI&"AYER VOMITO 4 VECES HOY DECAIDOHA TENIDO ERLICHIA"&ENRO+DEXA HEPAT&&&&&5.6&38.6&&

El "&" es el separador de campo.

Pero al leer lo toma de esta manera
000002&09/06/15&TBI&"AYER VOMITO 4 VECES HOY DECAIDO
HA TENIDO ERLICHIA"&ENRO+DEXA HEPAT&&&&&5.6&38.6&&


Perform varying I from I by 1 until D(I) = "&" OR I > 700
CONTINUE
move D(I) to NOM(II)
ADD 1 TO II
end-perform.


lectura en cobol.

"ojo al crear un tema no aparece el marcador de cobol en el foro."

Kuk
23 de agosto de 2018, 21:40
Gatomalo, posiblemente haya un salto de línea de por medio.

Cómo tienes definida la FD ?

"ojo al crear un tema no aparece el marcador de cobol en el foro."
Gracias, ya está corregido ;)

drvedia1981
23 de agosto de 2018, 21:50
Hola y algo asi ...

UNSTRING campo_total_ a_leer DELIMITED BY "&"
INTO campo1 campo2 campo3 etc.
Saludos

Gatomalo
24 de agosto de 2018, 06:12
FD REPORTE LABEL RECORD IS STANDARD.
01 REC-REPOR PIC X(2000).

Kuk
24 de agosto de 2018, 09:29
drvedia1981, para ello hay que conocer el número de separaciones. Si son simepre de la misma cantidad entonces valdría.

Gatomalo, pues yo creo que lo más seguro es que haya un X"0A" o X"0D" o X"0D0A" ahí donde te corta la línea.

Gatomalo
24 de agosto de 2018, 15:55
Tambien pienso igual pero como puedo encontrar ese comando para borrar de la linea ??

Kuk
24 de agosto de 2018, 23:04
Gatomalo, se me ocurre lo siguiente:

En caso de que el número de campos (separados por &) sea siempre el mismo (aunque no contenga nada, la cantidad de dicho carácter siempre es la misma en cada registro), lo que puedes hacer es contarlos para cada registro "lógico".

Por ejemplo, si sabes que siempre debe haber 10 & por registro, los vas contando. Si ves que has llegado al final de los datos del registro leído, pero el contador de &-s es inferior a 10, lees el registro siguiente con READ pero sigues tratándolo como si fuera el anterior, es decir continuas el contado y la extracción de datos para el registro de destino actual.
Lo que quiero decir, es que hagas un o varios READ del fichero de entrada hasta que obtengas el registro de salida "lógico".

En caso de que la cantidad de &-s es variable, ahora mismo lo veo un poco chungo de hacer... :nocreo:

Gatomalo
25 de agosto de 2018, 05:22
Si reviso la cadena y reemplazo el X"0A" o X"0D" o X"0D0A" por blanco
¿Como seria la sintaxis?

Kuk
25 de agosto de 2018, 19:14
Gatomalo, no se puede. Es decir, se puede hacer la acción en sí, pero no en este caso. Porque dicho carácter significa "salto de línea" que equivale a "fin registro" para el COBOL.

Salvo que vayas leyendo por bytes, uno por uno, y reemplaces todos los saltos de linea creando así un único registro conteniendo todo el churro...

Gatomalo
26 de agosto de 2018, 19:45
Logre solucionar como este archivo venia del excel hice un reemplazo alt-010 por espacio del tabulador y quito todos los saltos de linea.

Kuk
27 de agosto de 2018, 09:08
Gatomalo, pero entonces tienes un único registro en entrada o sigues teniendo varios ?

Gatomalo
28 de agosto de 2018, 20:21
El problema era al haber un salto de linea en el bucle de lectura se saltaba como otro registro.