Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-03-2020
aprendiz_delphi aprendiz_delphi is offline
Registrado
 
Registrado: mar 2020
Posts: 4
Poder: 0
aprendiz_delphi Va por buen camino
leer csv

Buenos dias.
Estoy empezando con esto del delphi.
Me planteo leer un fichero csv y tengo que pasarlo a una tabla de una base de datos.
Hay alguna opción en delphi para no hacerlo que simplifique la lectura y la concatenacion para realizar el insert.

CAMPO1;CAMPO2;CAMPO3
A;B;C
D;E;F
A;F;B

Necesitaria realizar 3 insert con esos 3 campos
Responder Con Cita
  #2  
Antiguo 18-03-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Qué base de datos?
Responder Con Cita
  #3  
Antiguo 18-03-2020
aprendiz_delphi aprendiz_delphi is offline
Registrado
 
Registrado: mar 2020
Posts: 4
Poder: 0
aprendiz_delphi Va por buen camino
pues Maria_db, pero al final entiendo que esto es independiente.
Necesito crear los insert en el programa.
Responder Con Cita
  #4  
Antiguo 18-03-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.278
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Aquí tienes un par de links correspondientes a entradas del blog sobre leer un TXT (que puede ser un CSV) utilizando ADO.
Puedes pasarlo desde el fichero a un Dataset o directamente a la tabla.

https://neftali.clubdelphi.com/carga...tilizando-ado/
https://neftali.clubdelphi.com/carga...o-ado-parte-2/
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #5  
Antiguo 18-03-2020
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Tenes que leer el archivo csv en un TStringList y sabiendo que la primer linea corresponde a la cabecera de columnas, operar en consecuencia.

Ejemplo simplificado usando la tabla Customers.csv (que viene con Delphi)
Código Delphi [-]
...
var
  T1,T2: TStrings;
  i,j: Integer;
begin
  T1 := TStringList.Create;
  try
    T1.LoadFromFile('Customers.csv');
    for i := 1 to T1.Count-1 do
    begin
      T2 := TStringList.Create;
      ExtractStrings([';'], [' '], PChar(T1[i]), T2);
      try
        DataSet.Insert;
        for j := 0 to DataSet.FieldCount-1 do
          DataSet.Fields[j].AsString := StringReplace(T2[j],'"','',[rfReplaceAll]);
        DataSet.Post;
      finally
        T2.Free;
      end;
    end;
  finally
    T1.Free;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 18-03-2020 a las 13:54:00. Razón: simplificar codigo
Responder Con Cita
  #6  
Antiguo 18-03-2020
aprendiz_delphi aprendiz_delphi is offline
Registrado
 
Registrado: mar 2020
Posts: 4
Poder: 0
aprendiz_delphi Va por buen camino
Gracias, por las ideas.
No puedo usar un dataset, ya que algunas veces, la insercion es incremental o completa en funcion del radio button.
lo primero que hago ya, es una select a la tablas para ver el nombre de las columnas y preparar los campos del insert.
Luego voy a leer linea a linea el fichero.
Cuando tenga la linea lo pasare a un tstringlist con el delimitador, para que me lo trocee.
Ahi generare el insert a la tabla, para luego pasarlo como un script.
Como lo veis?
Responder Con Cita
  #7  
Antiguo 18-03-2020
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por aprendiz_delphi Ver Mensaje
Gracias, por las ideas.
No puedo usar un dataset, ...
Use un TDataSet para el ejemplo por que en tu consulta inicial indicabas:
Cita:
Empezado por aprendiz_delphi Ver Mensaje
...
Me planteo leer un fichero csv y tengo que pasarlo a una tabla de una base de datos.
Hay alguna opción en delphi para no hacerlo que simplifique la lectura y la concatenacion para realizar el insert.
...
Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 19-03-2020
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
Hola!!

En MySQL/Maria existe una función directa que importa un CSV a una tabla. Los parámetros cambian un poco de MySQL a Maria_DB pero básicamente el funcionamiento es similar, aquí tienes la documentación:
Maria_DB: https://mariadb.com/kb/en/columnstore-load-data-infile/
MySQL: https://dev.mysql.com/doc/refman/8.0/en/load-data.html
Los requisitos para poder utilizar esta función es tener creada una tabla con todos los campos que contiene el CSV (puede ser una tabla temporal) y tener el fichero CSV en una ruta accesible de forma local por el motor de BBDD.

La ventaja principal es la rapidez de la conversión de los datos.

Ejemplo de uso para un fichero llamado "csv_test.csv" con separador de ";" y guardado en la carpeta tmd del servidor

Código SQL [-]
LOAD DATA INFILE '/tmp/csv_test.csv' 
  INTO TABLE data_tmp           -- tabla en la que se inserta
  FIELDS
    TERMINATED BY ';'           -- separador de campos
    OPTIONALLY ENCLOSED BY '"'  -- indica si lascadenas van envueltas entre dobles comillas
  LINES
    TERMINATED BY '\r\n'        -- el separador de linea

En MySQL se pueden usar algunos comandos mas como establecer valores por defecto o modificar registros duplicados, etc pero Maria_db esta un poco mas limitado

Y una vez que ya tengas los datos importados en la tabla puedes operar perfectamente con comandos SQL
Responder Con Cita
  #9  
Antiguo 27-03-2020
ariasdill ariasdill is offline
Registrado
 
Registrado: mar 2020
Posts: 1
Poder: 0
ariasdill Va por buen camino
Disculpa, no estoy seguro si es correcto.
En la parte de variables defines T1 como Tstrings y en el cuerpo del programa la inicializas como TStringlist

Es eso correcto? o es un error de dedo?
Responder Con Cita
  #10  
Antiguo 27-03-2020
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por ariasdill Ver Mensaje
Disculpa, no estoy seguro si es correcto.
En la parte de variables defines T1 como Tstrings y en el cuerpo del programa la inicializas como TStringlist

Es eso correcto? o es un error de dedo?
Si, es correcto. Estoy aplicando polimorfismo, uso la clase base para los objetos que representan listas de cadenas en Delphi, pero no puedo instanciarla directamente por que contiene métodos abstractos.

Sin embargo, si necesitara algún método o atributo, como por ejemplo el método Sort, de la clase derivada TStringList, debería declarar la variable de este último tipo o no los tendría disponibles.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Leer CSV Willo Varios 4 04-04-2017 20:06:21
Leer XML chinchan C++ Builder 3 08-11-2012 23:45:24
Leer Xml chrids506 Internet 4 31-03-2008 12:55:14
Leer *.res dmagui Varios 5 04-10-2005 22:40:32
Leer usb trex2000 Varios 1 14-03-2005 12:51:41


La franja horaria es GMT +2. Ahora son las 22:34:26.


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
Copyright 1996-2007 Club Delphi