Ver la Versión Completa : convertir un archivo .csv a .dbf en runtime
jazmin
16-03-2007, 22:41:50
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:
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:
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:
// 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
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í:
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
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 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?
vBulletin v3.6.8, Derechos ©2000-2024, Jelsoft Enterprises Ltd.