Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Como importar un txt a base de datos (https://www.clubdelphi.com/foros/showthread.php?t=58609)

Velia 25-07-2008 15:28:04

Como importar un txt a base de datos
 
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

Cita:

Empezado por Neftali (Mensaje 303271)
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

gracias
 
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

Cita:

Empezado por Caro (Mensaje 303286)
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 si estas usando SQL, aunque no lo he probado

Caro 25-07-2008 23:29:39

Cita:

Empezado por juanelo (Mensaje 303289)
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

Cita:

Empezado por Caro (Mensaje 303367)
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

Cita:

Empezado por Delphius (Mensaje 303383)
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

Cita:

Empezado por Caro (Mensaje 303286)
...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

Muchas gracias!!!!!
 
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.


La franja horaria es GMT +2. Ahora son las 05:13:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi