Leer archivo de texto plano y persistir en tabla

101 views
Skip to first unread message

Gustavo Rojo

unread,
Sep 7, 2014, 10:31:16 AM9/7/14
to publice...@googlegroups.com
Hola foro, una vez mas recurro a ustedes en busca de ayuda!

Tengo que leer unos archivos de texto plano, que según el requerimiento están en un formato que se lama PSEUDO EDIFACT AIR , eh trabajado con txt solo de manera secuencial, pasándolos a dbf o viceversa. 
Pero nunca teniendo que leer linea a linea y campo x campo, y buscando un carácter de final de linea diferente en cada linea, en ocasiones termina con (;) y en otras con (<CR>)... Una vez logrado leer cada linea y cada campo, tengo que ir persistiendolos en una tabla dbf nativa de vfp.

Les dejo un ejemplo de uno de los archivos:

Filename:  @0200001.JUN

AIR-BLK206;7A;;210;0200033751;1A1321037;001001
AMD 0200000052;1/1;              
1A1321037;1A1321037
MUC1A Y4OKRB008;0202;MVDUY2363;;MVDUY2363;;MVDUY2363;;MVDUY2367;94500140;01;;;;;;;;;;;;;;;;;;;;IB HGE6Q 
A-IBERIA;IB 0755
B-TTP
C-7906/ 9099ACSU-9099ACSU-I-0
D-090601;090602;090602
G-X  ;;MVDMVD;
H-004;003OMVD;MONTEVIDEO       ;MAD;MADRID BARAJAS   ;IB    6012 M M 25JUL1520 0800 26JUL;OK02;HK02;BL;0;340;M;;PC ;;;ET;1140 ;N;6165;4 
H-002;004OMAD;MADRID BARAJAS   ;FCO;ROME FIUMICINO   ;IB    3608 O O 26JUL1150 1410 26JUL;OK02;HK02;G ;0;320;;;PC ;4 ;;ET;0220 ;N;828;B 
H-003;005OFCO;ROME FIUMICINO   ;MAD;MADRID BARAJAS   ;IB    3679 O O 30JUL1505 1730 30JUL;OK02;HK02;G ;0;321;;;PC ;B ;;ET;0225 ;N;828;4 
H-005;006OMAD;MADRID BARAJAS   ;LPA;LAS PALMAS       ;IB    0812 M M 30JUL2035 2220 30JUL;OK02;HK02;G ;0;321;;;PC ;4 ;;ET;0245 ;N;1095;  
H-006;007OLPA;LAS PALMAS       ;MAD;MADRID BARAJAS   ;IB    0813 M M 24JAN1945 2320 24JAN;OK02;HK02;G ;0;321;;;PC ;;;ET;0235 ;N;1095;4 
H-007;008XMAD;MADRID BARAJAS   ;MVD;MONTEVIDEO       ;IB    6013 M M 25JAN0050 0910 25JAN;OK02;HK02;BD;0;340;M;;PC ;4S;;ET;1120 ; ;6165;  
K-FUSD2256.00    ;;;;;;;;;;;;USD2486.50    ;;;   
KFTF; USD169.20   UY EM; USD32.08    JD AE; USD9.61     QV DP; USD0.76     MJ AD; USD2.87     EX AE; USD6.31     HB CO; USD7.13     IT EB; USD2.54     VT SE;;;;;;;;;;;;;;;;;;;;;;
TAX-USD169.20   UY ;USD32.08    JD ;USD29.22    XT ;
L-RESTRICTION APPLY
M-MLPX6MUY       ;ONEDI          ;ONEDI          ;MLPX6MUY       ;MLPX6MUY       ;MLPX6MUY       
N-NUC
O-XX25JAN;XXXX;28JULXX;XX25JAN;29JUL25JAN;29JUL25JAN
Q-MVD IB MAD Q195.00(IB ROM37.20IB MAD37.20)IB LPA896.00IB X/MAD IB MVD Q195.00 896.00NUC2256.40END ROE1.000000XT9.61QV0.76MJ2.87EX6.31HB7.13IT2.54VT
I-001;01CORREA/DELIA;;APMVD +59829002446 - NEXTRIP (CASA CENTRAL) - A;;
FQV IB  FQTV8-IB24445140;P1
SSR OTHS 1A  /WE REMIND YOU TO ISSUE AND ADV TKT IN PNR BY 09JUL
S-01/S11A.N;/S09C.N;/S10C.N;/S07C.N;/S11C.N;/S10C.N
T-K075-4786742169-70
FE22 NOEND/CHGS AND REF REST;S3-8;P1-2
FM*M*1
FPCASH
FVIB
TKOK01JUN/MVDUY2363
I-002;02MALVASIO/ENRIQUE;;APMVD +59829002446 - NEXTRIP (CASA CENTRAL) - A;;
FQV IB  FQTV8-IB24430787;P2
SSR OTHS 1A  /WE REMIND YOU TO ISSUE AND ADV TKT IN PNR BY 09JUL
S-02/S11C.N;/S09B.N;/S10B.N;/S07B.N;/S11B.N;/S10A.N
T-K075-4786742171-72
FE22 NOEND/CHGS AND REF REST;S3-8;P1-2
FM*M*1
FPCASH
FVIB
TKOK01JUN/MVDUY2363
RIRFAVOR RECONFIRMAR SUS VUELOS
RIRIBERIA ITALIA 199 101 191
RIRIBERIA ESPANA 902400500
ENDX


Desde ya muchas gracias!

Saludos!


NY

unread,
Sep 7, 2014, 10:38:14 PM9/7/14
to publice...@googlegroups.com
Para lo que tu quieres existen las instrucciones FOPEN(), FGEST(), FCLOSE(), (y otra).  Estan bien detalladas en el Help de VFP.  Estas instrucciones te permiten abrir un archivo e ir viendo 1 a 1 cada linea, haces lo que tengas que hacer en esa linea y sigues a la siguente.

Saludos

Edgar Acevedo

unread,
Sep 8, 2014, 3:29:34 AM9/8/14
to publicesvfoxpro
Opción 1
Tratarlo con operaciones de archivo de bajo nivel:
- Con FOPEN() lo abres
- Con FGETS() lees cada línea (y la pones en un Array por ejemplo)
- Con FCLOSE() cierras el archivo

Opción 2
Tener una tabla con un campo tipo memo y cargarle el contenido del archivo usando el APPEND MEMO <campo> FROM <archivo plano> 

Luego...
Para extraer los datos de los diferentes campos que hay por línea:
- Con STRTRAN() obtienes el dato contenido entre dos separadores de campo (como el ; en tu caso)
- Con el AT() podés ubicarte en una posición específica de la línea
- Con el SUBSTR() podés extraer el contenido de una determinada posición dentro del string.

Saludos,


Edgar Acevedo


Carlos Miguel FARIAS

unread,
Sep 8, 2014, 7:07:08 AM9/8/14
to Grupo Fox
No olviden de FILETOSTR(), levanta el archivo de un saque, y ALINES(), separa el texto en lineas (y los pone en un arreglo) según separadores que se provean.
Si el archivo es muy grande, es más rápido las sentencias Falgo de bajo nivel (y a veces, no hay otra). Hay una, STRESXTRACT, que nunca la use, pero es aplicable a archivos con "tags" delimitadores.
Saludos: Miguel, La Pampa (RA)

Gustavo Rojo

unread,
Sep 8, 2014, 9:21:25 AM9/8/14
to publice...@googlegroups.com
Gracias por sus sugerencias, voy a comenzar a aplicarlas, los mantengo al tanto.

Saludos!
--
Gustavo Rojo| Sr. Analyst & QA
La Plata (1900), Buenos Aires, Argentina
Office: +54.9.221.5374343 
Skype: rojo.gustavo
Reply all
Reply to author
Forward
0 new messages