Ver Mensaje Individual
  #10  
Antiguo 27-01-2005
Avatar de JuanBCT
JuanBCT JuanBCT is offline
Miembro
 
Registrado: ago 2004
Ubicación: Campana, Argentina
Posts: 57
Reputación: 20
JuanBCT Va por buen camino
Estaba interesado en tu función porque ahora me pidieron pasar 3 campos más; me dí cuenta que no lo iba a poder seguir haciendo así porque yo buscaba la coma con la función POS de los string. El inconveniente era q esta devuelve la posición del 1er caracter q uno busca en la línea; ahora q tenía varias comas no iba a poder seguir insertandole comillas!
Pero bueno, lo acabo de solucionar copiando cada "campo" en strings temporales para así ponerles las comillas a c/u y luego concatenar todo; haciendo la línea. Gracias por todo! Les dejo el código final de la procedure q hice, por si a alguno le interesa...

Código Delphi [-]
procedure TImport_form.FlatSpeedButton1Click(Sender: TObject);
var
Archivocsv, Campos: Tstringlist;
I: Integer;
S,A,B,C,D,E,F,G,H,Y:string;
begin
Datamodule1.Client.Last;
//StringLists para el archivo y para los campos
Archivocsv:=Tstringlist.create;
Campos:=Tstringlist.create;
  try
  //Cargo el archivo a la stringlist Archivocsv...
  Archivocsv.LoadFromFile(Filelistbox1.FileName);
  //Rutina para agregar las doble comillas...
  for I:=1 to Archivocsv.Count -1 do
      begin
      //Paso c/línea a un string para modificarla a mi gusto con insert
      S:=Archivocsv.Strings[i];
       //Modifico...
       Insert('"', S, 1);
       Insert('"', S, (Length(S))+1);
       //Pone " antes y después de la 1er coma (ahora tengo q hacer q recorra
        Insert('"',S,Pos(',',S));
        Insert('"',S,Pos(',',S)+1);
        //Voy separando cada campo, y les pongo comillas para luego
        //concatenarlos...
        E:=Copy(S,0,Pos(',',S));

        A:=Copy(S,Pos(',',S)+1,((Length(S))-Pos(',',S)));
        Insert('"',A,Pos(',',A));
        Insert('"',A,Pos(',',A)+1);
        F:=Copy(A,0,Pos(',',A));

        B:=Copy(A,Pos(',',A)+1,((Length(A))-Pos(',',A)));
        Insert('"',B,Pos(',',B));
        Insert('"',B,Pos(',',B)+1);
        G:=Copy(B,0,Pos(',',B));

        C:=Copy(B,Pos(',',B)+1,((Length(B))-Pos(',',B)));
        Insert('"',C,Pos(',',C));
        Insert('"',C,Pos(',',C)+1);
        H:=Copy(C,0,Pos(',',C));
        //D queda como está....
        D:=Copy(C,Pos(',',C)+1,((Length(C))-Pos(',',C)));
        //Ahora, concateno todo en Y
        Y:=concat(E,F,G,H,D);

       Archivocsv.Strings[i]:=Y;
      end;
  Archivocsv.SaveToFile(Filelistbox1.FileName);
  //---------------------------------------------
  Archivocsv.LoadFromFile(Filelistbox1.FileName);
  //Separo en Campos con COMMATEXT
  for I:=0 to Archivocsv.Count -1 do
      begin
       CoolGauge1.Progress:=I*100 div Archivocsv.Count;
       Campos.clear;
       Campos.CommaText:=ArchivoCsv[i];
       //Paso c/campo a la tabla
       //Pone nro de cliente automáticamente...
       if Datamodule1.Client.RecordCount=0 then ncli:=0
          else ncli:=Datamodule1.Client['CLI_NUM'];
       Datamodule1.Client.Insert;
       Datamodule1.Client['CLI_NUM']:=ncli + 1;
       //==============================================
       Datamodule1.Client['CLI_NOM']:=Campos[0];
       Datamodule1.Client['CLI_MAIL']:=Campos[1];
       Datamodule1.Client['CLI_TEL']:=Campos[2];
       Datamodule1.Client['CLI_CALIDAD']:=Campos[3];
       Datamodule1.Client['CLI_TELLAB']:=Campos[4];
       Datamodule1.Client.Post;
      end;
     finally
  Archivocsv.Free;
  Campos.Free;
end;
end;

Saludos!!!

Última edición por JuanBCT fecha: 27-01-2005 a las 19:23:08. Razón: Correción
Responder Con Cita