Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-06-2012
ErYcK ErYcK is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 26
Poder: 0
ErYcK Va por buen camino
Lentitud leer .csv

Mi problema es el siguiente:

Leo un archivo csv. en un RichEdit, lo leo con este componente porque con un Memo me paso del límite de caracteres.

Después de leerlo lo cargo en un StringGrid y comparo los datos con una base de datos en busca de nuevos registros.

El problema esta en la lentitud del proceso de lectura del .csv, no se me ocurre forma de acelerar este proceso ya que tengo que tener en cuenta:
-Que cuando haya mas de un espacio seguido deje de leer la linea del RichEdit.
-Que cuando encuentre un ";" debe meter la variable en la celda del StringGrid.
-Que cuando encuentre algo que no sea ";" rellene la variable con la palabra encontrada.

Mi código es el siguiente, si alguien tiene alguna idea de como podría acelerar el proceso seria de gran ayuda.

Código:
void __fastcall TXPrincipal::ToolButton2Click(TObject *Sender)
{

         if(OpenDialog1->Execute())
        {
               //LECTURA DE CSV
                int col =0;
                int cont=0;
                String referencia ="";
                RichEdit1->Lines->LoadFromFile(OpenDialog1->FileName);
                XCarga->Show();
                XCarga->Caption="Leiendo .CSV...";
                XCarga->ProgressBar1->Min = 0;
                XCarga->ProgressBar1->Max = RichEdit1->Lines->Count;
                for (int i =0; i <= RichEdit1->Lines->Count; i++)
                {
                        XCarga->ProgressBar1->Position = i;
                        col=0;
                        cont=0;
                        for (int j=1; j<= RichEdit1->Lines->Strings[i].Length();j++)
                        {
                                XCarga->Caption="Leiendo .CSV...Linea: "+ IntToStr(i)+ "Columna: "+ IntToStr(j);
                                if (RichEdit1->Lines->Strings[i][j] != ' ')
                                {
                                        cont =0;
                                        if (RichEdit1->Lines->Strings[i][j] == ';')
                                        {
                                        StringGrid1->Cells[col][i] = referencia;
                                        referencia = "";
                                        col++;
                                        }
                                        if (RichEdit1->Lines->Strings[i][j] != ';')
                                        {
                                        referencia = referencia +RichEdit1->Lines->Strings[i][j];
                                        }
                                }
                                if (RichEdit1->Lines->Strings[i][j] == ' ')
                                {
                                        cont++;
                                        if (cont >2)
                                                break;
                                }
                        }

                }

        //COMPARAR CON BD
        XCarga->Close();
        }

        XDatos->TCategorias->Open();
        XDatos->TSubCat1->Open();
        XDatos->TSubCat2->Open();
        XDatos->TSubCat3->Open();
        XDatos->TMarcas->Open();
        XCarga->Close();
        XDatos->TCaracteristicas->Open();
        int cont=0;
        XCarga->Show();
        XCarga->ProgressBar1->Min = 1;
        XCarga->ProgressBar1->Max = RichEdit1->Lines->Count;
        String ref = "";
        for (int f=1;f<=StringGrid1->RowCount;f++)
        {
            if (StringGrid1->Cells[0][f]!="")
            {
            ref = StringGrid1->Cells[0][f];

            XCarga->Caption = IntToStr(f)+ " Productos Nuevos";
            XCarga->ProgressBar1->Position = f;
            XDatos->QExisteProducto->Close();
            XDatos->QExisteProducto->Parameters->ParamByName("PRef")->Value = ref;
            XDatos->QExisteProducto->Open();
            if (XDatos->QExisteProducto->FieldByName("existe")->Value ==0)
            {
                        String categoria ="";
                        XDatos->QProductos->Append();
                        XDatos->QProductosREFERENCIA->Value = StringGrid1->Cells[0][f];
                        XDatos->QProductosESTADO->Value = StringGrid1->Cells[1][f];
                        categoria = StringGrid1->Cells[2][f];
                        XDatos->QExisteCategoria->Close();
                        XDatos->QExisteCategoria->Parameters->ParamByName("PCat")->Value = categoria ;
                        XDatos->QExisteCategoria->Open();
                        if (XDatos->QExisteCategoria->FieldByName("Existe")->Value >0)
                        {
                                XDatos->QCodigoCategoria->Close();
                                XDatos->QCodigoCategoria->SQL->Text = "select * from categorias where categoria = :PCat";
                                XDatos->QCodigoCategoria->Parameters->ParamByName("PCat")->Value = categoria;
                                XDatos->QCodigoCategoria->Open();
                                XDatos->QProductosCATEGORIA->Value = XDatos->QCodigoCategoriaCodCategoria->Value;
                                XDatos->QCodigoCategoria->Close();
                        }
                        else
                        {
                                XDatos->TCategorias->Append();
                                XDatos->TCategoriasCATEGORIA->Value = StringGrid1->Cells[2][f];
                                XDatos->TCategorias->Post();
                                XDatos->QProductosCATEGORIA->Value=XDatos->TCategoriasCodCategoria->Value;
                        }
                        String subcat1 =StringGrid1->Cells[3][f];
                        XDatos->QExisteSubcat1->Close();
                        XDatos->QExisteSubcat1->Parameters->ParamByName("PSubCat1")->Value = subcat1;
                        XDatos->QExisteSubcat1->Open();
                        if (XDatos->QExisteSubcat1->FieldByName("Existe")->Value >0)
                        {
                                XDatos->QCodigoSubCat1->Close();
                                XDatos->QCodigoSubCat1->SQL->Text = "select * from SUBCATS1 where SUBCAT1 = :PSubcat1";
                                XDatos->QCodigoSubCat1->Parameters->ParamByName("PSubcat1")->Value = subcat1;
                                XDatos->QCodigoSubCat1->Open();
                                XDatos->QProductosSUBCAT1->Value = XDatos->QCodigoSubCat1CodSUBCAT1->Value;
                                XDatos->QCodigoSubCat1->Close();
                        }
                        else
                        {
                                XDatos->TSubCat1->Append();
                                XDatos->TSubCat1SUBCAT1->Value = StringGrid1->Cells[3][f];
                                XDatos->TSubCat1CATEGORIA->Value = XDatos->QProductosCATEGORIA->Value;
                                XDatos->TSubCat1->Post();
                                XDatos->QProductosSUBCAT1->Value= XDatos->TSubCat1CodSUBCAT1->Value;
                        }
                        String subcat2 =StringGrid1->Cells[4][f];
                        XDatos->QExisteSubcat2->Close();
                        XDatos->QExisteSubcat2->Parameters->ParamByName("PSubCat2")->Value = subcat2;
                        XDatos->QExisteSubcat2->Open();
                        if (XDatos->QExisteSubcat2->FieldByName("Existe")->Value >0)
                        {
                                XDatos->QCodigoSubCat2->Close();
                                XDatos->QCodigoSubCat2->SQL->Text = "select * from SUBCATS2 where SUBCAT2 = :PSubcat2";
                                XDatos->QCodigoSubCat2->Parameters->ParamByName("PSubcat2")->Value = subcat2;
                                XDatos->QCodigoSubCat2->Open();
                                XDatos->QProductosSUBCAT2->Value = XDatos->QCodigoSubCat2CodSUBCAT2->Value;
                                XDatos->QCodigoSubCat2->Close();
                        }
                        else
                        {
                                XDatos->TSubCat2->Append();
                                XDatos->TSubCat2SUBCAT2->Value = StringGrid1->Cells[4][f];
                                XDatos->TSubCat2SUBCAT1->Value = XDatos->QProductosSUBCAT1->Value;
                                XDatos->TSubCat2->Post();
                                XDatos->QProductosSUBCAT2->Value = XDatos->TSubCat2CodSUBCAT2->Value;
                        }
                        String subcat3 =StringGrid1->Cells[5][f];
                        XDatos->QExisteSubcat3->Close();
                        XDatos->QExisteSubcat3->Parameters->ParamByName("PSubCat3")->Value = subcat3;
                        XDatos->QExisteSubcat3->Open();
                        if (XDatos->QExisteSubcat3->FieldByName("Existe")->Value >0)
                        {
                                XDatos->QCodigoSubcat3->Close();
                                XDatos->QCodigoSubcat3->SQL->Text = "select * from SUBCATS3 where SUBCAT3 = :PSubcat3";
                                XDatos->QCodigoSubcat3->Parameters->ParamByName("PSubcat3")->Value = subcat3;
                                XDatos->QCodigoSubcat3->Open();
                                XDatos->QProductosSUBCAT3->Value = XDatos->QCodigoSubcat3CodSUBCAT3->Value;
                                XDatos->QCodigoSubcat3->Close();
                        }
                        else
                        {
                                XDatos->TSubCat3->Append();
                                XDatos->TSubCat3SUBCAT3->Value = StringGrid1->Cells[5][f];
                                XDatos->TSubCat3SUBCAT2->Value = XDatos->QProductosSUBCAT2->Value;
                                XDatos->TSubCat3->Post();
                                XDatos->QProductosSUBCAT3->Value = XDatos->TSubCat3CodSUBCAT3->Value;

                        }
                        XDatos->QProductosPRODUCTO->Value = StringGrid1->Cells[6][f];
                        XDatos->QProductosKEY->Value = StringGrid1->Cells[7][f];

                        String marca =StringGrid1->Cells[8][f];
                        XDatos->QExisteMarca->Close();
                        XDatos->QExisteMarca->Parameters->ParamByName("PMarca")->Value = marca;
                        XDatos->QExisteMarca->Open();
                        if (XDatos->QExisteMarca->FieldByName("Existe")->Value >0)
                        {
                                XDatos->QCodigoMarca->Close();
                                XDatos->QCodigoMarca->SQL->Text = "select * from MARCAS where MARCA = :PMarca";
                                XDatos->QCodigoMarca->Parameters->ParamByName("PMarca")->Value = marca;
                                XDatos->QCodigoMarca->Open();
                                XDatos->QProductosMARCA->Value = XDatos->QCodigoMarcaCodMARCA->Value;
                                XDatos->QCodigoMarca->Close();
                        }
                        else
                        {
                                XDatos->TMarcas->Append();
                                XDatos->TMarcasMARCA->Value = StringGrid1->Cells[8][f];
                                XDatos->TMarcas->Post();
                                XDatos->QProductosMARCA->Value = XDatos->TMarcasCodMARCA->Value;
                        }
                        XDatos->QProductosDESCRIPCION->Value = StringGrid1->Cells[9][f];
                        XDatos->QProductosFOTOS->Value = StringGrid1->Cells[10][f];
                        XDatos->QProductosCATEGORIAX->Value = StringGrid1->Cells[11][f];
                        XDatos->QProductosCATEGORIAS->Value = StringGrid1->Cells[12][f];
                        XDatos->QProductos->Post();
                        for(int c=13;c<=StringGrid1->ColCount;c++)
                        {
                                if (StringGrid1->Cells[c][f]!="")
                                {
                                        if (c % 2 !=0)
                                        {
                                        XDatos->TCaracteristicas->Append();
                                        XDatos->TCaracteristicasCATEGORIA->Value = XDatos->QProductosCATEGORIA->Value;
                                        XDatos->TCaracteristicasSUBCAT1->Value = XDatos->QProductosSUBCAT1->Value;
                                        XDatos->TCaracteristicasSUBCAT2->Value = XDatos->QProductosSUBCAT2->Value;
                                        XDatos->TCaracteristicasSUBCAT3->Value = XDatos->QProductosSUBCAT3->Value;
                                        XDatos->TCaracteristicasref->Value = XDatos->QProductosREFERENCIA->Value;
                                        XDatos->TCaracteristicasCARACTERISTICA->Value = StringGrid1->Cells[c][f];
                                        XDatos->TCaracteristicasVALOR->Value = StringGrid1->Cells[c+1][f];
                                        XDatos->TCaracteristicas->Post();
                                        }
                                }
                        }

             if (StringGrid1->Cells[0][f]=="")
                        cont ++;
             if (cont > 100)
                        break;
             }
             }
        }
        XCarga->Close();
        XDatos->QRecorreProductos->Close();
        DBGrid1->Refresh();

}
Gracias de antemano por vuestra atención.

Un Saludo.
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
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 06:47:23.


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