Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   convertir un archivo .csv a .dbf en runtime (https://www.clubdelphi.com/foros/showthread.php?t=41505)

jazmin 16-03-2007 22:41:50

convertir un archivo .csv a .dbf en runtime
 
Hola muchachones:) necesito convertir un archivo
csv a uno dbf en delphi pero que este en run time

Me propusieron que con una componente TExcelApplication y usas los métodos de la interfaz OLE de Excel para guardar el archivo como Dbase.

Pero no se como:o nunca he manejado ese componente me podrian ayudar
gracias!
:p

roman 16-03-2007 23:41:16

No veo necesidad de usar Excel como intermediario. Yo intentaría lo siguiente:

1. Usar el DatabaseDesktop para crear la tabla DBF vacía
2. Leer el archivo CVS en un StringList
3. Usar una componente Table para acceder a la tabla creada
3. Ciclar sobre todas las líneas del StringList para exportar a la tabla DBF:

Código Delphi [-]
for i := 0 to StringList.Count - 1 do
begin
  ...
end;

a. Cada línea del archivo será un conjunto de valores separados por comas. Usa un segundo StringList auxiliar para separar los valores en líneas:

Código Delphi [-]
sl.CommaText := StringList[i]; // i = índice de línea actual

b. Un ciclo anidado sobre el StringList auxiliar para copiar los valores en los campos de la tabla:

Código Delphi [-]
// insertas registro en blanco
Table.Append;

Copias valores a campos
for j := 0 to sl.Count - 1 do
  Table.Fields[j].Value := sl[j];

// Guardas registro
Table.Post;
Claro que si los registros son muchos puede ser un poco lento usar un StringList para el archivo CSV, pero podrías leer línea a línea con los clásicos ReadLn(Archivo).

// Saludos

jazmin 16-03-2007 23:46:54

gracias roman eres 1 amor
 
Voy a intentarlo
pero fijate que si son muchos registros son mmm como unos 40 campos y unos mil registros
asi que va tardar bastantito!

lo que hago ahorita es abrirlo en excel y el senkeys mando teclazos para grabarlo pero abriendo el excel lo cual me implica que el usuario no deje usar la pc si no tiene muchos problemas
lo voy a intentar
claro que si tienes una mejor idea la recibiere anciosamente

eres un niño hermoso!:p

roman 16-03-2007 23:55:39

No sé, mil registros no se me hace mucho. Pero, como te decía, puedes optar por algo así:

Código Delphi [-]
var
  Archivo: TextFile;
  Linea: String;
  sl: TStringList;
  j: Integer;

begin
  AssignFile(Archivo, 'archivo.csv');
  Reset(Archivo);

  sl := TStringList.Create;
  
  try
    while not EoF(Archivo) do
    begin
      ReadLn(Archivo, Linea);
      sl.CommaText := Linea;
      
      Table.Append;

      for j := 0 to sl.Count - 1 do
        Table.Fields[j].Value := sl[j];

      Table.Post;
    end;
  finally
    sl.Free;
  end;

  CloseFile(Archivo);
end;

// Saludos

jazmin 17-03-2007 00:01:27

lo voy a intentar
 
ok gracias roman!

mira ya me tengo que ir salgo pero mañana a primerita hora lo intento

eres un amorzote!

te ganaste un beso!
smuaaaaaaaack
jijijijiji
virtual no te emociones!

va bye!!!:p

jazmin 18-03-2007 17:58:32

si jalo!!
 
si jalo me parecio muy buena la solucion pero....

un ultimo favorcillo

tengo 5 campos date en mi tabla destino y al pasarlo me marca errores
tuve que cambiar mi campos a tipo string para que los pudiera pasar

fijate que se me ocurre comprobar los datos con trystrtodate
para ver si son fecha los cambio a tipo fecha y los grabo o tienen alguna mejor idea?


La franja horaria es GMT +2. Ahora son las 01:23:58.

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