Cobol Foro

Cobol Foro (https://www.cobolforo.es/index.php)
-   PowerCOBOL v3 (V3L10, Win32) (https://www.cobolforo.es/forumdisplay.php?f=5)
-   -   [Sintaxis] Lectura archivo secuencial (https://www.cobolforo.es/showthread.php?t=881)

Gatomalo 23 de agosto de 2018 15:56

Lectura archivo secuencial
 
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:
Código:

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
Código:

000002&09/06/15&TBI&"AYER VOMITO 4 VECES HOY DECAIDO
HA TENIDO ERLICHIA"&ENRO+DEXA HEPAT&&&&&5.6&38.6&&

Código COBOL:
  1.   Perform varying I  from I by 1 until D(I) = "&" OR I > 700                                                      
  2.     CONTINUE  
  3.        move D(I) to NOM(II)
  4.        ADD 1 TO II
  5.        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 ?

Cita:

Citación del post de Gatomalo (Mensaje 4437)
"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 ...

Código COBOL:
  1.    UNSTRING campo_total_ a_leer DELIMITED BY "&"
  2.           INTO campo1 campo2 campo3 etc.
Saludos

Gatomalo 24 de agosto de 2018 06:12

Código COBOL:
  1.  FD REPORTE  LABEL RECORD IS STANDARD.
  2.  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.


La franja horaria es GMT +2. Ahora son las 15:34.

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