Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-03-2007
Avatar de jazmin
jazmin jazmin is offline
Miembro
 
Registrado: mar 2007
Ubicación: mexico
Posts: 44
Poder: 0
jazmin Va por buen camino
Wink 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 nunca he manejado ese componente me podrian ayudar
gracias!
Responder Con Cita
  #2  
Antiguo 16-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 16-03-2007
Avatar de jazmin
jazmin jazmin is offline
Miembro
 
Registrado: mar 2007
Ubicación: mexico
Posts: 44
Poder: 0
jazmin Va por buen camino
Wink 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!
Responder Con Cita
  #4  
Antiguo 16-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #5  
Antiguo 17-03-2007
Avatar de jazmin
jazmin jazmin is offline
Miembro
 
Registrado: mar 2007
Ubicación: mexico
Posts: 44
Poder: 0
jazmin Va por buen camino
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!!!
Responder Con Cita
  #6  
Antiguo 18-03-2007
Avatar de jazmin
jazmin jazmin is offline
Miembro
 
Registrado: mar 2007
Ubicación: mexico
Posts: 44
Poder: 0
jazmin Va por buen camino
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?
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
Convertir Archivo mid jorge Varios 0 09-11-2006 16:39:08
Convertir un archivo de recursos .res en una DLL Sick boy Varios 1 28-06-2006 13:34:40
Convertir un archivo .ATW a .BMP verdu Gráficos 4 13-06-2006 20:06:41
convertir a pdf un archivo con cualquier formato JuanErasmo C++ Builder 0 17-08-2005 23:44:26
convertir 1 archivo a UTF-8 cisterpe Varios 0 03-02-2004 19:17:26


La franja horaria es GMT +2. Ahora son las 06:29:46.


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