Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-06-2012
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.676
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Una pregunta, si quieres leer un fichero y mostrarlo en un stringgrid, ¿por qué lo cargas en el richedit de intermediario?
Responder Con Cita
  #2  
Antiguo 18-06-2012
ErYcK ErYcK is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 26
Poder: 0
ErYcK Va por buen camino
Pues en principio lo hice por comodidad, ya que con el LoadFromFile ya leo perfectamente el csv teniendo en cuenta los saltos de linea, y me coloca 1 registro por linea en el RichEdit, lo cual facilita luego la lectura para el StringGrid.

Piensas que la lentitud es a causa de leer el RichEdit? quizás leyendo directamente desde el archivo puede ser mas rápido?
Si es asi como crees que podria leer desde el archivo caracter a caracter para tener en cuenta las mismas cosas?

Gracias por tu interes
Responder Con Cita
  #3  
Antiguo 18-06-2012
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 ErYcK.

Si no entendí mal lo que deseas hacer, se me ocurre que podrías cambiar el separador ';' por ',' y aprovechar la propiedad CommaText del TStringGrid.

Fijate si de este modo hace mas rápido lo que buscas:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender) {
TStringList *TS = new TStringList;
TStringGrid *SG = static_cast<TStringGrid*> (StringGrid1);

 if (OpenDialog1->Execute()) {
   TS->LoadFromFile(OpenDialog1->FileName);
   for(int i=0; i< TS->Count; i++) {
     StringReplace(TS->Strings[i], ';', ',', TReplaceFlags() << rfReplaceAll);
     SG->Rows[i]->CommaText = TS->Strings[i];
   }
 }
 delete TS;
}
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #4  
Antiguo 19-06-2012
ErYcK ErYcK is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 26
Poder: 0
ErYcK Va por buen camino
Gracias por tu aporte ecfisa, el problema es que algunos campos llevan ',' entonces necesito el ';' como separador, sino me crearía conflictos.
Por ejemplo hay un campo fotos en el cual hay 6 nombres de fotos separados con ',' entonces me metería 6 campos distintos donde debe ser solo uno.
Este mismo proceso lo hice en principio utilizando el componente Memo, y lo hacia más rápido pero me vi obligado a cambiarlo porque llegara el límite de caracteres del Memo, no termino de entender porque con el RichEdit se ralentiza tanto, en principio pensé que el problema estaba en que siempre recorría al completo los campos del RichEdit y de por ese motivo utilice el contador para que una vez encuentre 2 espacios seguidos me me salga del bucle, pero no consigo acelerarlo suficiente con eso.

De nuevo gracias por vuestra atención.
Responder Con Cita
  #5  
Antiguo 19-06-2012
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 ErYcK.

A ver, proba si te sirve de este modo:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if (OpenDialog1->Execute()) {
    TStringList *TS = new TStringList;
    TS->LoadFromFile(OpenDialog1->FileName);
    for(int i=0; i< TS->Count; i++)
      ExtractStrings(TSysCharSet()<< ';', TSysCharSet() << ' ',
        TS->Strings[i].c_str(), StringGrid1->Rows[i]);
    delete TS;
  }
}
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 19-06-2012
ErYcK ErYcK is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 26
Poder: 0
ErYcK Va por buen camino
Buenísimo el aporte ecfisa, me acelera muchísimo el proceso y en principio va bien, el único fallo es que la base de datos de la empresa tiene ciertos fallos, como por ejemplo que algunos de los campos no están, por ejemplo algunos de los registros son algo así:

referencia;estado;producto;categoria;categoria1;categoria2;categoria3; descripción
11234;;producto1;hogar; electrodomésticos;Lavadoras;;lavadora ultimo modelo tal y tal;

Es decir algunos campos vienen vacíos, con lo cual se genera en el csv dos ';' seguidos y lo que hace es meterme en el estado, la categoría.

No se si me he explicado bien, el tema es que cuando se encuentran dos ';' seguidos ha dejar esa celda vacía, estoy dándole vueltas al código que me pusiste
e intento dar con la tecla para tener eso en cuenta pero me da ami que no puede ser de esa forma, aunque no lo se.

Si se te ocurre algo seria de gran ayuda.

Gracias por el esfuerzo.
Responder Con Cita
  #7  
Antiguo 19-06-2012
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 de nuevo.
Cita:
el tema es que cuando se encuentran dos ';' seguidos ha dejar esa celda vacía
Entonces, creo que habría que hacer un pequeño cambio a esta línea del código anterior:
Código:
  ExtractStrings(TSysCharSet()<< ';', TSysCharSet() << '\0',
        TS->Strings[i].c_str(), StringGrid1->Rows[i])
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Lentitud en ADO JF Sebastian Conexión con bases de datos 0 16-03-2008 11:06:26
Lentitud Firebird mjjj Conexión con bases de datos 16 13-01-2008 17:35:06
Lentitud en la red. Carlos Arevalo Varios 2 09-07-2007 19:04:08
Lentitud en la red Ignacio Conexión con bases de datos 2 26-08-2003 14:09:39


La franja horaria es GMT +2. Ahora son las 18:21:28.


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