Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #14  
Antiguo 07-07-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 pelikno.

En el código que adjuntas (#14), para recorrer 100000 registros realiza 100000 ciclos de lectura, que es muchisimo mejor que el primer código que leia caracter a caracter(#8), ya que en ese caso eran 100000 x 22 lecturas. Pero creo que se puede optimizar mucho más el código de lectura en bloque.

No tengo acceso a los datos y puede que tengas que cambiar la cantidad de caracteres por registro o algún detalle que se me escape por no tener el archivo origen o el formato requerido.
Código Delphi [-]
...
const
  NCHAR = 22;
  LEER_X = 20000 ;
  TOT_BUFFER = LEER_X * NCHAR;

procedure TForm1.btnACDSClick(Sender: TObject);
var
  F: file of Char;
  Buf: array[1..TOT_BUFFER] of Char;
  c, rl: Integer;
  T1,T2: TTime;
  Ciclos: Integer;
begin
  AssignFile(F, 'C:\Archivo.txt');
  try
    Reset(file(F), 1);
    ClientDataSet.CreateDataSet;
    ClientDataSet.Open;
    ClientDataSet.DisableControls;
    T1:= Time;
    Ciclos:= 1;
    repeat
      BlockRead(file(F), Buf, SizeOf(Buf), rl);
      c:= 0;
      while c < TOT_BUFFER do
      begin
        if c mod 100 = 0 Then 
          ClientDataSet.MergeChangeLog;
        ClientDataSet.Append;
        ClientDataSetCuit.AsString:= Buf[c+1]+Buf[c+2]+Buf[c+3]+
            Buf[c+4]+Buf[c+5]+Buf[c+6]+Buf[c+7]+Buf[c+8]+Buf[c+9]+
            Buf[c+10]+Buf[c+11];
        ClientDataSetD1.AsString:= Buf[c+12]+Buf[c+13];
        ClientDataSetD2.AsString:= Buf[c+14]+Buf[c+15];
        ClientDataSetD3.AsString:= Buf[c+16]+Buf[c+17];
        ClientDataSetD4.AsString:= Buf[c+18];
        ClientDataSetD5.AsString:= Buf[c+19];
        Inc(c, NCHAR);
        ClientDataSet.Post;
      end;
      Inc(Ciclos);
    until rl = 0;
    CloseFile(F);
    T2:= Time;
    Caption:= FormatDateTime('hh:mm:ss:dd',T2-T1)+'  realizando '+IntToStr(Ciclos)+' ciclos.';
    ClientDataSet.EnableControls;
  except
    ShowMessage('Archivo inexistente');
  end;
end;
En este caso, con 100000 registros sólo realiza 7 ciclos en 00:00:05:30 (en mi equipo).

Como no tengo ni conozco el RxMemoryData, usé un TClientDataSet para la prueba. Lo único que tenés que hacer es crear los campos persistentes en él respetando los nombres y el código debería funcionarte.
Cualquier dificultad te adjunto el ejemplo con el generador de datos.

Saludos.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 07-07-2011 a las 22:46:54.
Responder Con Cita
 



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
ayuda copiar datos de una tabla a otra Rofocale Varios 1 18-05-2011 03:39:40
Ayuda insertar cadena en otra ? Coco_jac Varios 4 14-12-2005 21:37:46
necesito ayuda para pasar registros a otra tabla ddd_ddd Conexión con bases de datos 2 09-09-2005 20:33:41
ayuda para enlazar con otra tabla Debian Conexión con bases de datos 1 24-03-2005 16:48:28
Como puedo tabajar de otra forma un DBGrid, Ayuda urgente danytorres Varios 7 18-07-2003 21:24:02


La franja horaria es GMT +2. Ahora son las 08:03:56.


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