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)
-   -   Txt delimitado a tabla (https://www.clubdelphi.com/foros/showthread.php?t=14398)

Walterdf 19-09-2004 23:30:53

Txt delimitado a tabla
 
Buenas
Tengo que ingresar datos a una tabla Paradox y la base me la dan en un txt delimitado por comas y entre comillas ("campo1","campo2",...).
Se me ocurrió que podía podía hacerlo con copy, estableciendo la cantidad de caracteres de cada campo hasta llegar al último pero el ancho de campo no es siempre el mismo. Lo que si es fijo es que cada campo va encerrado entre " " y separados por coma.
¿Hay alguna forma de pasar esto a una tabla?
Muchas gracias desde ya.
Un abrazo.

Walter

DarkByte 20-09-2004 08:02:06

También podrías probar con Ini FIles. Creo que en la sección de ejemplos de clubdelphi hay un hospital sin tablas... (un ejemplo, digo, no vayan a creer que clubdelphi también tiene sección de enfermería)

Neftali [Germán.Estévez] 20-09-2004 09:50:13

Cita:

Empezado por Walterdf
...Tengo que ingresar datos a una tabla Paradox y la base me la dan en un txt delimitado por comas y entre comillas ("campo1","campo2",...)

Puedes utilizar los componentes de ADO para "leer" los ficheros CSV (delimitados por comas) como si fuesen una tabla; A partir de ahí se trata de ir leyendo registro de un sitio e ir insertándolos en otro.

roman 20-09-2004 15:25:34

Cita:

Empezado por Walterdf
Lo que si es fijo es que cada campo va encerrado entre " " y separados por coma.
¿Hay alguna forma de pasar esto a una tabla?

Una opción podría ser usar dos TStringList. Uno para leer todas las líneas del archivo en memoria y el otro para procesar cada línea del primero asignándola a la propiedad CommaText del segundo. Esto te separará los campos en líneas que puedes ya procesar fácilmente para copiar los campos a la tabla destino:

Código Delphi [-]
var
  ArchivoCsv, Campos: TStringList;
  I, J: Integer;

begin
  ArchivoCsv := TStringList.Create;
  Campos := TStringList.Create;

  try
    ArchivoCsv.LoadFromFile('archivo.csv');
    for I := 0 to ArchivoCsv.Count - 1 do
    begin
      Campos.Clear;
      Campos.CommaText := ArchivoCsv[i];
      
      for J := 0 to Table.FieldCount - 1 do
      begin
        Table.Fields[J].Value := Campos[J];
      end;
    end;
  finally
    ArchivoCsv.Free;
    Campos.Free;
  end;
end;

// Saludos

Walterdf 20-09-2004 16:16:19

Excelente tu solución!!!
Muchas gracias Roman.
Un abrazo.

Walter


La franja horaria es GMT +2. Ahora son las 21:46:51.

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