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 12-04-2011
harimuya harimuya is offline
Miembro
 
Registrado: ago 2003
Posts: 19
Poder: 0
harimuya Va por buen camino
Unhappy Demora en array (File of Arreglo)

Estimados Srs.

Tengo un problema al ejecutar estas rutinas, demora mucho al generar el archivo, la informacion se recibe
de un Pic, el cual no demora casi nada, pero al ingresar a la rutina siguiente se toma mucho tiempo para generarlo,
alguien podriaindicarme como hacer para que al generar el archivo no demore tanto.

Gracias desde ya por su ayuda

Saludos.
Código Delphi [-]
Begin
    Destino:=Path+'c:\File.Epa';
    IniGra := 0;
    PosIniX:=IniIdx;
    AssignFile(Henry,Destino);

    Rewrite(Henry);
    DataGraf.Idx:=0;
    DataGraf.Nom:='Carlos';
    Write(Henry,DataGraf);

    {$I-}
    for LetIni:=1 to GetTokenCount(Memo1.Text, Caract) do
    begin
      wData:=GetToken(Memo1.Text, Caract, LetIni);

      if (wData <> CadenaSub) then
      begin
        if Length(wData) > 0 then
          VInt[IniGra] := StrToInt(wData)
      end
      else
      if (wData = CadenaSub) and (IniIdx > 1) then
      begin
        seek(Henry,IniIdx-1);
        DataGraf.Hora := wData;
        Write(Henry,DataGraf);
        IniGra  := 0;
        IniIdx  := IniIdx;
      end;

      if IniGra >= 4 then
      begin
        DataGraf.Nom   := '';
        DataGraf.Idx   := IniIdx;
        DataGraf.Line := VInt;
        DataGraf.Hora := '';
        Write(Henry,DataGraf);
        IniGra  := 0;
        IniIdx  := IniIdx+1;
      end;
      IniGra:=IniGra+1;
    end;
    {$I+}

    if IOResult = 0 then
      CloseFile(Henry)
    else
      ShowMessage('Hubo un Error.');
End;
/////////////////////////////
function GetToken(Cadena, Separador: String; Token: Integer): String;
var
  Posicion: Integer;
begin
  while Token > 1 do
  begin
    Delete(Cadena, 1, Pos(Separador,Cadena)+Length(Separador)-1);
    Dec(Token);
  end;
  Posicion:= Pos(Separador, Cadena);
  if Posicion = 0 then
    Result:= Cadena
  else
    Result:= Copy(Cadena, 1, Posicion-1);
end;
//////////////////////////////////
function GetTokenCount(Cadena, Separador: String): Integer;
var
  Posicion: Integer;
begin
  if Cadena <> '' then
  begin
    Posicion:= Pos(Separador, Cadena);
    Result:= 1;
    while Posicion <> 0 do
    begin
      Inc(Result);
      Delete(Cadena, 1, Posicion+Length(Separador)-1);
      Posicion:= Pos(Separador, Cadena);
    end;
  end
  else
    Result:=0;
end;

Última edición por ecfisa fecha: 12-04-2011 a las 22:36:51. Razón: Agregar ETIQUETAS [DELPHI] y [/DELPHI]
Responder Con Cita
  #2  
Antiguo 12-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
por favor usa la guia de estilos... no se entiende muy bien tu codigo
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 13-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 harimuya.

Te faltó aclarar de que tipo son las siguientes declaraciones:
Código Delphi [-]
// empezamos a suponer tipos...
type
  TArrayDesconocido = array[1..???] of Integer;
  TDataGraf = record
    Idx: Integer; // supongo
    Nom: string[??];
    Hora: string[??];
    Line: TArrayDesconocido;
  end;
// seguimos suponiendo tipos ...
var
  DataGraf: TDataGraf;
  Henry: File of TDataGraf;
  Path,Destino: string;
  IniGra: Integer;
  PosIniX: Integer;
  IniIDx : Integer;
  LetIni: Integer;
  Caract: string;
  wData: string;
  CadenaSub: string;
  VInt: TArrayDesconocido;
A partir de estas suposiciones, que bién pueden ser incorrectas, el código compila.

Pero... también te falto:
.La estructura de los datos que están en el TMemo ya que al poner cualquier texto, recibí error de conversión en la línea:
Código Delphi [-]
VInt[IniGra] := StrToInt(wData);
. La cabecera del procedimiento central (varios nombres que declaré en var, sé que son argumentos).

Para poder verificar el por qúe de la demora, deberías poner el código completo de las funciónes que nos presentas, un ejemplo de lo que puede contener el Memo y una descripción somera de lo que realiza el código.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 13-04-2011
harimuya harimuya is offline
Miembro
 
Registrado: ago 2003
Posts: 19
Poder: 0
harimuya Va por buen camino
Gracias Ecfisa por la respuesta,

disculpa por lo datos que no inclui, es cierto los datos son como indicas

Type
VecInt = Array[0..4] of Integer;

FChannel = record
Idx : Integer;
Line : VecInt;
Nom : String[12];
Hora : String[12];
end;

var
DataGraf : FChannel;
Henry: File of FChannel;
Path,Destino: string;
IniGra: Integer;
PosIniX: Integer;
IniIDx : Integer;
LetIni: Integer;
Caract: string;
wData: string;
CadenaSub: string;

Mi pregunta va mas si estructuralmente esta bien, el programa compila y funciona, pero a la hora de generar el archvo demora mucho, paso a explicarte el funcionamiento,
El programa recibe de un Pic 520 muestras de informacion que es relativamente rapido no demora mas de 10 milisegundos, ahi va a estructura, (Data,1250,1155,1200,5,1000,905,1305,605,......), esto lo pasa a un campo Memo, el cual a partir de ahi, lo guarda en "Destino:=Path+'c:\File.Epa';".
al generar el archivo lo prepara y demora casi 200 Milisegundos, a partir de ahi grafica la muestra recibida el cual demora otro 15 milisegundos que es nada,

La gran pregunta es: se puede generar la informacion sin grabar en disco ?? (Write(Henry,DataGraf)

A la espera de sus comentarios.
Gracias

Última edición por ecfisa fecha: 13-04-2011 a las 22:10:38.
Responder Con Cita
  #5  
Antiguo 13-04-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por favor, leer nuestra guía de estilo, gracias por tu colaboración.
Son unas simples normas para entendernos mejor y que esto no sea un caos. Por ejemplo, explica tu problema detalladamente, etiqueta tu código, etc.

Responder Con Cita
  #6  
Antiguo 13-04-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por cierto, la ruta de destino es siempre alguna unidad de red, ¿verdad?, lo digo porque con este código siempre grabará en el disco c:\

Código Delphi [-]
Destino:=Path+'c:\File.Epa';

xxxxxxxxxc:\File.Epa <-- ???
Responder Con Cita
  #7  
Antiguo 13-04-2011
harimuya harimuya is offline
Miembro
 
Registrado: ago 2003
Posts: 19
Poder: 0
harimuya Va por buen camino
Disculpa Casimiro tendre presente la guia de estilo.

Si es cierto el destino es una unida del disco duro, pero mi pregunta va mas si estructuralmente esta bien la parte del array que es la parte principal ya que demora mucho,
como comentaba no se si podria hacer la parte del array para que lo genere en memoria sin escribir en el disco duro, asumo que seria mas rapido generarlo en memoria,
si es asi, como se podria hacer ya que nunca lo genere en memoria.

Gracias
Responder Con Cita
  #8  
Antiguo 13-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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
Cita:
Empezado por harimuya Ver Mensaje
La gran pregunta es: se puede generar la informacion sin grabar en disco ?? (Write(Henry,DataGraf)
Hola harimuya.

Lo podrías hacer en memoria utilizando un TClientDataSet.

Revisá este enlace que explica de forma sencilla como hacerlo (mensaje #4).

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 14-04-2011
harimuya harimuya is offline
Miembro
 
Registrado: ago 2003
Posts: 19
Poder: 0
harimuya Va por buen camino
Gracias Ecfisa,
estoy probando y me va bien.
Saludos.
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
Demora en locate... Luis Castillo Firebird e Interbase 1 16-01-2006 17:35:44
Demora de aplicacion(SQL SERVER 2000) dunia_lv Conexión con bases de datos 0 23-09-2005 18:08:13
Demora de conexión... dunia_lv Conexión con bases de datos 0 23-05-2005 19:13:37
Ejecutable se demora mucho en abrir BlueSteel Varios 1 13-08-2004 01:05:09
Demora al cambiar la hora CFPA86 Varios 5 26-09-2003 20:58:27


La franja horaria es GMT +2. Ahora son las 23:09:44.


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