Hace años utilice una serie de funciones para leer archivos separados por distintos delimitadores.
1. Sabía la estructura que debía rescatar del archivo
2. El tipo de campo que debía cargar
3. El archivo era un texto plano, es decir sin ningún tipo de carácter extraño, salvo los caracteres de fin de línea, retorno de carro y fin de archivo.
Archivo ejemplo delimitado por mbanci.txt ;
01;31-12-2006;31-12-2006;A1;1333;CARGO BCI;
01;31-12-2006;31-12-2006;A2;10000;DIFERENCIA 784 280305;
01;31-12-2006;31-12-2006;A4;2000;DIF INGRESO 859 190805;
01;31-03-2014;31-03-2014;08777152;289932;C-307/RELIQUIDACION DE/HABILITACION;
01;03-06-2014;03-06-2014;00009808;5250;C-682/REEMBOLSO P/MARIA JOSE G;
01;08-09-2014;08-09-2014;09374722;47143;C-1356/PAGO DE VAC/PATRICIO CAR;
01;07-10-2014;07-10-2014;00000271;6200;C-271/CONSTITUYE DEUD/SUSANA FUENTES P;
01;07-10-2014;07-10-2014;09416989;4550;C-1626/REEMBOLSO POR C/MANSILLA BEYER S;
01;21-10-2014;21-10-2014;09441505;126140;C-1770/ADQUISICION DE M/NELSON BERNARDO;
01;21-10-2014;21-10-2014;09441541;365116;C-1779/ADQUISICION DE M/OFIMASTER LTDA.;
01;23-10-2014;23-10-2014;00001486;132804;C-1801/SERVICIO DE ARRI/HOTEL BELLAVISTA;
01;14-10-2014;14-10-2014;09390056;54000;C/1609/PAGO HONR/JOSE AGUERO VELASQUEZ;
01;10-12-2014;10-12-2014;09460665;42052;C-2235/DEVOLUCION/MUNICIPALID;
01;24-02-2015;24-02-2015;00000054;56237;C-250/PAGO SUELD/HABILITACION;
01;08-04-1915;08-04-1915;00000792;1002547;C-491/ADQUISICION/DIMERC S.A.;
01;01-07-2015;01-07-2015;00000168;4402335;C-168/RECUPERA V/MUTUAL DE SE;
01;03-07-2015;03-07-2015;00000130;199331676;C-130/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000131;569671;C-131/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000132;8283562;C-132/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000133;411577;C-133/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000134;18100;C-134/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000135;1808180;C-135/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000136;827421;C-136/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000137;17401;C-137/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000138;1965735;C-138/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000139;138122;C-139/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000140;145235;C-140/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000141;628629;C-141/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000142;158332;C-142/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000143;149621;C-143/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000144;3235533;C-144/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000146;45982;C-146/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000147;201600;C-147/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000148;198000;C-148/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000149;330216;C-149/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000151;1268010;C-151/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000152;240000;C-152/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000153;171000;C-153/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000154;400000;C-154/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000155;14400;C-155/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000156;1289256;C-156/AJUSTE CONT/HABILITACION;
01;03-07-1915;03-07-1915;00000162;628320;C-162/AJUSTE CONT/HABILITACION;
01;03-07-2015;03-07-2015;00000163;44750;C-163/AJUSTE CONT/HABILITACION;
01;31-07-2015;31-07-2015;09460675;4402335;C-1324/TRASPASO DE/HABILITACION;
01;28-07-2015;28-07-2015;1028706;916594;ABONO PAGO;
01;31-12-2006;31-12-2006;A3;1;DIFERENCIA CH 1533464 280605;
01;31-12-2006;31-12-2006;A5;600;ERROR DEPOSITO;
Código de la carga
file = "mbanci.txt"
cuenta=0
momen=fopen(file,2)
ca=fseek(momen,0,2)
fwrite(momen,"* eof"+chr(13)+chr(19),7)
fclose(momen)
store space(0) to tot
store 0 to puntero,cc
**********
do while .t.
cc=cc+1
archivo=space(500)
momen=fopen(file)
fseek(momen,cuenta)
archivo=fread(momen,466)
fclose(momen)
x=at(chr(13),archivo)
cuenta=cuenta+x+1
line=substr(archivo,1,x+1)
line=alltrim(line)
if line=chr(13)+chr(10)
loop
endif
if lower(left(line,5))="* eof"
line=space(puntero)+line
exit
else
line=space(puntero)+line
endif
cam_p=1
do while .t.
y=at(";",line)
nombre_p=substr(line,1,y-1)
line=substr(line,y+1)
do case
case cam_p=1
banc_p=nombre_p
case cam_p=2
fec_p=ctod(nombre_p)
case cam_p=3
fecgir_p=ctod(nombre_p)
case cam_p=4
ndoc_p=nombre_p
case cam_p=5
mdoc_p=val(nombre_p)
case cam_p=6
glo_p=nombre_p
thisform.text1.Value=glo_p
case cam_p=7
EXIT
endcase
if line=chr(13)+chr(10)
exit
endif
cam_p=cam_p+1
enddo
enddo
** a partir de acá operas los 6 campos extraídos por cada linea.
Espero que te sirva, lo utilice por muchos años sin problemas.
Roberto
Coyhaique - Chile