Leer información desde un Txt con 19 millones de registros

836 views
Skip to first unread message

Irwin

unread,
Jun 3, 2013, 8:27:49 PM6/3/13
to mundovis...@googlegroups.com
Saludos Amigos,
 
Estoy realizando una importacion de más de 19 millones de registros con la siguiente estructura:
 
E,1101,MAASS,LINDER,RICHARD,"",1922-01-01,7,9,6,70906011
E,1340,ACERO,ESPINOSA,JOSUE,"",1913-01-01,1,1,10,10110042
E,1563,AYERRA,NUIN,JOSE,"",1904-05-04,21,5,5,210505003
E,1567,GURRUCHAGA,BASTIDA,PEDRO,"",1909-01-01,13,18,1,131801014
E,1693,PAZMI#O,PAZMI#O,HUGO,ALFONSO,1916-12-01,1,1,22,10122011
E,1957,QUIN,SORZANO,CARLOS,"",1909-01-01,13,9,2,130902015
E,2198,SOULE,BERMY,JEANNE,"",1917-06-18,1,1,22,10122007
E,2280,VANEGAS,CAMPOVERDE,ROMAN,VICENTE,1921-02-26,21,5,3,210503001
E,2284,PARCERO,RIOS,HERMAN,"",1904-01-01,24,1,1,240101010
E,2881,DE LA ROSA,HERNANDEZ,VIRGILIO,"",1908-01-01,13,2,1,130201001
Como pueden ver, está delimitado por comas (,) y lo que hago es separar los campos para insertarlos en una tabla. Lo abro con FOPEN() y obtengo las lineas con FGETS()
 
El problema que me da es que cada linea se obtiene distorsionada y no me muestra los valores reales.
 
Hago el ejemplo con 10 registros y si me obtiene las lineas correctamente pero conb los 19 millones nada.
 
Alguna sugerencia??
 
No subo el archivo porque pesa mucho, por eso les coloco el ejemplo.
 
Saludos y mil gracias!!!

Sergio Monroy

unread,
Jun 4, 2013, 1:08:40 AM6/4/13
to mundovis...@googlegroups.com
lo vas a hacer una vez?, si es asi, puedes intentar convertirlo con excel a columnas y luego a vfp a dbf's (el excel tiene varias formas de delimiter, talvez te resulte, suerte


--
_______________________________________________________________
Has recibido este mensaje porque estás suscrito al Grupo "Mundo Visual
FoxPro" de Grupos de Google.
 
Para anular la suscripción a este grupo, envía un mensaje a:
mundovisualfox...@googlegroups.com
---
Has recibido este mensaje porque estás suscrito al grupo "Mundo Visual FoxPro" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a mundovisualfox...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Carlos Miguel FARIAS

unread,
Jun 4, 2013, 6:07:53 AM6/4/13
to mundovisualfoxpro

Excell solo maneja un millón de filas. Y tiene 19.
Mi pregunta es: que es o como salen distorsiona dos los registros?
Que tamaño tiene en bytes el archivo de texto?
Estas seguro que en algún lado no esta roto?
sSaludos: Miguel, La Pampa (RA)

Fidel Charny

unread,
Jun 4, 2013, 9:39:11 AM6/4/13
to mundovis...@googlegroups.com
Supone que para cada linea tomas
lcString=fputs(nh,2048)
Luego deberás usar un parser. Usas Alines()? o tienes alguna func. de usuario?
Si utilizas Alines, puedes detectar en qué linea no se producen la cantidad de items esperados.
Por ejemplo, 
*  lc=fGets(nh,2048)
lc=[E,1693,PAZMI#O,PAZMI#O,HUGO,ALFONSO,1916-12-01,1,1,22,10122011]
nlines=ALINES(galines,lc,1,",")
* ?nlines = 11
if nLines#11
      Messagebox("Distorsión en "+chr(13)+lc)
      * Si abres otro archivo con fcreate(), puedes agregarle las líneas que tienen
      * distorsión.
endif

Adrian Velazquez

unread,
Jun 5, 2013, 3:17:54 PM6/5/13
to mundovis...@googlegroups.com
Hola!

Lo primero que tienes que hacer es definir la estructura de tu tabla, sacar la longitud total del registro en base al tamaño de cada campo y ese valor sera tu cadena, ejemplo:

para esta linea ----E,1101,MAASS,LINDER,RICHARD,"",1922-01-01,7,9,6,70906011----

Cad = FRead(ArchiT,56)  ---> ojo incluyendo las comas 
campo1 = substr(cad,1,1)
campo2 = val(substr(cad,2,4))
.
.
etc.
select alias 
replace tipo with campo1
replace numero with campo 2 
 
en fin tienes que jugar con las comas, por ejemplo que cuando encuentre una coma sea otra campo, no se, pero para mayor exactitud te recomiendo lo primero definir la longitud de tu registro.

saludos.



--
Reply all
Reply to author
Forward
0 new messages