PDA

Ver la Versión Completa : Como importar un txt a base de datos


Velia
25-07-2008, 15:28:04
Hola tengo un archivo txt donde los campos se encuentran separados por | quisiera saber cómo puedo impotar los datos del archivo en una tabla que puede ser en firefox, mysql o access
Puedo utilizar cualquier forma, la necesida es solo transformar el txt en una tabla

Saludos
Velia

Caro
25-07-2008, 16:25:05
Hola velia, puedes utilizar un StringList para obtener todo el archivo, en cada posición se te cargara cada linea del archivo y otro StringList para que te separe cada linea en cuanto encuentre |, aquí cada posición sera el dato del campo, en este hilo mensaje #3 hay un ejemplo http://www.clubdelphi.com/foros/showthread.php?t=54934 donde tu delimitador no sería el ' ' sino |, teniendo los datos en el ultimo StringList solo sería insertar a la tabla en cuestión.

Saluditos

Neftali [Germán.Estévez]
25-07-2008, 16:28:00
Deberías concretar más exactamente en qué necesitas ayuda. Idea general, componentes a utilizar, pasos necesarios,...

Yo así a nivel general te diría:

(1) Carga el fichero TXT en un StringList (si no es extremadamente gigantesco)
(2) Recorre las líneas 1 a 1.
(3) Parsea la cadena para obtener los datos de los campos.
(4) Ves realizando INSERTs sobre la tabla.

Intentalo o concreta un poco más tu pregunta.

P.D: Lo de Firefox no me ha quedado claro...:o:o:o

EDITO: Veo que se me han adelantado...

Caro
25-07-2008, 16:32:07
P.D: Lo de Firefox no me ha quedado claro...:o:o:o

A mi también lo de FireFox, no me ha quedado claro :o.

Saluditos

Velia
25-07-2008, 16:40:22
Primero perdon por lo de firefox, se me chispoteó quise decir firebird :(
Segundo el archivo txt es gigantesco trata con el un padrón de 70.000 usuarios es decir 70000 registros tendría algun problema ???
Tercero el único requisito es pasar ese archivo a una tabla pero no tengo restricciones.

Gracias por la ayuda sigo aceptando sugerencias

Neftali [Germán.Estévez]
25-07-2008, 17:03:40
No considero eso gigantesco.
He realizado una prueba en mi ordenador y un archivo de texto de unos 3GB, con 98.000 líneaqs de texto se carga en apenas 2 o 3 segundos en un TStringList.
Hacer un recorrido de todas las líneas mostrando información en pantalla (que es lento) se debe ir a un poco más de un minuto.

Lo que más te tardará será la inserción en la Base de Datos.

¿Es un proceso que tienes que hacer una vez? ¿Varias veces? ¿Es importante la velocodad? ...¿?¿?¿

Caro
25-07-2008, 17:24:16
Como te dice Neftali no tendras problemas con esa cantidad.

Neftali una pregunta, si fuera un archivo gigantesco que otras opciones tenemos a parte del StringList??. Yo tenía que trabajar sobre un archivo grande del cual tenía que hacer algunas operaciones y no lo pude cargar a un StringList, me salia Out Memory y ahí quedaba todo, por lo que se me ha ocurrido dividir el archivo en varios según a la cantidad de líneas que yo le indique en mi programa, una vez teniendo mi archivo en varios, hice mis operaciones, de esa forma pude hacer lo que tenía que hacer, por eso mi pregunta que otras posibilidades tenemos para trabajar con un archivo gigante.

Saluditos

juanelo
25-07-2008, 17:42:09
Como te dice Neftali no tendras problemas con esa cantidad.

Neftali una pregunta, si fuera un archivo gigantesco que otras opciones tenemos a parte del StringList??. Yo tenía que trabajar sobre un archivo grande del cual tenía que hacer algunas operaciones y no lo pude cargar a un StringList, me salia Out Memory y ahí quedaba todo, por lo que se me ha ocurrido dividir el archivo en varios según a la cantidad de líneas que yo le indique en mi programa, una vez teniendo mi archivo en varios, hice mis operaciones, de esa forma pude hacer lo que tenía que hacer, por eso mi pregunta que otras posibilidades tenemos para trabajar con un archivo gigante.

Saluditos
Hola Caro,
Aunque no soy Neftali te doy una sugerencia, porque no lo lees atravez de un FileStream, puedes ir recorriendo el archivo y al mismo tiempo analizar si llega un '\n' o salto de línea para indentificar cuando has llegado al final de una linea.
Asi, en teoría ya no tendrías limite en el tamaño del archivo, aunque proablemente el proceso se haga mas lento, ya que ahora serían lectuas en el disco duro.
Saludos

coso
25-07-2008, 19:52:05
Hola, existe el bulk insert (http://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/lenguaje-sql/respuestas/1100890/texto-a-tabla-de-sql) si estas usando SQL, aunque no lo he probado

Caro
25-07-2008, 23:29:39
Hola Caro,
Aunque no soy Neftali te doy una sugerencia, porque no lo lees atravez de un FileStream, puedes ir recorriendo el archivo y al mismo tiempo analizar si llega un '\n' o salto de línea para indentificar cuando has llegado al final de una linea.
Asi, en teoría ya no tendrías limite en el tamaño del archivo, aunque proablemente el proceso se haga mas lento, ya que ahora serían lectuas en el disco duro.
Saludos

Muchísimas gracias por responder Juanelo, FileStream creo que es de C++ Builder, en delphi sería TextFile, la verdad que si, de esa forma pude leer todo el archivo en ese entonces, aunque creo que el hecho de dividir en varios archivos y aplicar mi algoritmo por partes, podía haberlo hecho de otra forma, sin tener que dividir en varios archivos.

Saluditos

Delphius
26-07-2008, 00:42:04
Muchísimas gracias por responder Juanelo, FileStream creo que es de C++ Builder, en delphi sería TextFile, la verdad que si, de esa forma pude leer todo el archivo en ese entonces, aunque creo que el hecho de dividir en varios archivos y aplicar mi algoritmo por partes, podía haberlo hecho de otra forma, sin tener que dividir en varios archivos.

Saluditos
Hola a todos,

Linett, ¿Qué versión de Delphi tienes? Al menos en la 6 está la clase TFileStream, y de la cual surgen las clases TStringTream, TMemoryStream, entre otras. Estas tres clases están en la unidad Classes.

Saludos,

Caro
26-07-2008, 06:16:45
Linett, ¿Qué versión de Delphi tienes? Al menos en la 6 está la clase TFileStream, y de la cual surgen las clases TStringTream, TMemoryStream, entre otras. Estas tres clases están en la unidad Classes.


Delphi 7 Marcelo, el rato que leí el mensaje de jueanelo, fui a la ayuda y puse FileStream y me salía que era una función de c++ Builder. Acabo de hacer mis pruebitas y si, ya no me sale el Out Memory, muchísimas gracias a los dos.

Saluditos

Neftali [Germán.Estévez]
28-07-2008, 09:59:02
...Neftali una pregunta, si fuera un archivo gigantesco que otras opciones tenemos a parte del StringList??

Bueno, veo que llego tarde,... muy tarde... :o:o:o
La idea es cambiar el modo de lectura; Cargar todo en un StringList, te permite trabajar con todo el archivo en memoria; Cómodo y rápido. La desventaja es que para archivos muy grandes no sirve. En ese caso el sistema de lectura debe ser diferente.

Me alegro de que ya lo hayas solucionado.

Velia
12-08-2008, 00:32:28
Antes que todo quiero agradecer y pedir disculpas por recién responder un hilo que empecé pero la verdad es que no pude probar las soluciones antes.
Primero quiero comentar que hasta el momento probé una sola solución la de Caro Así que MUCHAS GRACIAS:D me sirvió muchisimo
Segundo quiero preguntar a qué se considera un archivo gigantesco porque tengo que procesar 180.000 líneas y no sé que me conviene si usar la última solución que aconsejó Delphius la del TFileStream por la negativa de la velosidad.

Gracias a por todo a Todos pero aunque llegué tarde..... muy tarde ... no está de más agradecer:o

coso
12-08-2008, 08:21:38
Hola, tambien se puede cargar directamente a la base de datos mediante un schema.ini, si estas usando ADO. hace poco hubo un mensaje por aqui que comentaba mas o menos lo mismo.