Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con StringList (https://www.clubdelphi.com/foros/showthread.php?t=83906)

darkone2k4 13-08-2013 22:32:22

Problema con StringList
 
Salu2 amigos.

Estoy importando un archivo CVS separado por ";" el cual es generado con excel a partir de un XLS normal, pero tengo un problema con lo siguiente:

Aquí dejo 2 líneas de ejemplo que contiene el archivo:
Código Delphi [-]
2014;3;860;202;202;23565857-7;A;R;I;15/10/2011;;354;554;;0;S;;20;131;554;1;41013001;117924;117924;117924;117924;117924;117924;117924;117924;11  7924;117924;117924;117924
2014;3;861;35;35;05148366-9;D;R;I;15/03/2011; ;121;101; ;0;S; ;23;223;101;133;41022003;25742;25742;25742;25742;25742;25742;25742;25742;25742;25742;25742;25742
La primera línea la lee e inserta sin problemas en un StringGrid, pero la segunda produce un error al tratar de insertar el valor que viene después de "15/03/2011", en este caso ' '.

Código Delphi [-]
        for i := 0 to Lineas Do
        Begin
           fila.CommaText := csv.Strings[i];
           fila.Delimiter := ';';
           fila.DelimitedText := fila[0];
           For j := 0 To Columnas Do
               lista.Cells[j+1,i+1] := fila[j];
        End;

Y el error que me da es:
Código SQL [-]
Project Proyecto.exe raised exception class EStringListError with message 'List index out of bounds (11)'. Process stoped.

Espero puedan ayudarme a solucionar este inconveniente.

Salu2.

oscarac 13-08-2013 22:49:18

intenta transferir solo hasta ese dato "15/03/2011"

quiza sea un tema de capacidad del stringgrid (Columnas, fila, etc)

ecfisa 13-08-2013 23:14:03

Hola darkone2k4.

No sé el resultado que deseas lograr, pero si se trata de mostrar los datos separados por ';' encolumnados en el TStringGrid podes hacer:
Código Delphi [-]
...
var
  TS: TStrings;
  i : integer;
begin
  TS := TStringList.Create;
  try
    TS.LoadFromFile('TU_ARCHIVO.CVS');
    for i := 0 to TS.Count-1 do
    begin
      StringGrid1.Rows[i].Delimiter := ';';
      StringGrid1.Rows[i].DelimitedText := TS[i];
    end;
  finally
    TS.Free;
  end;
end;

Saludos. :)

oscarac 13-08-2013 23:21:52

parece que quisiera colocarlo en filas y columnas
el codigo que has colocado esta incompleto
no se sabe el valor de "columnas"

ecfisa 14-08-2013 00:09:54

Cita:

Empezado por oscarac (Mensaje 465533)
parece que quisiera colocarlo en filas y columnas
el codigo que has colocado esta incompleto
no se sabe el valor de "columnas"

Hola Oscar.

Es cierto, el número de columnas no está definido. Pero hice el código bajo el supuesto que tendrá conocimiento del número máximo de columnas que tiene el archivo que exporta desde Excel y declarará la misma cantidad de columnas en el TStringGrid para así poder contenerlas.

De todos modos si quiere ahorrarse la cuenta :), puede obtener el máximo número de columnas de este modo por ejemplo:
Código Delphi [-]
function GetMaxCols(aFileName: TFileName): Integer;
var
  TS1,TS2: TStrings;
  i: Integer;
begin
  Result := 0;
  TS1 := TStringList.Create;
  try
    TS1.LoadFromFile(aFileName);
    for i:= 0 to TS1.Count-1 do
    try
      TS2 := TStringList.Create;
      TS2.Delimiter := ';';
      TS2.DelimitedText := TS1[i];
      if TS2.Count-1 > Result then Result := TS2.Count-1;
    finally
      TS2.Free;
    end;
  finally
    TS1.Free;
  end;
end;

Y usar previo al código anterior:
Código Delphi [-]
begin
   StringGrid1.ColCount := GetMaxCols('TU_ARCHIVO.CVS');
   ...

Saludos. :)

oscarac 14-08-2013 00:14:06

tendremos q esperarr a ver que dice el amigo darkone2k4

darkone2k4 14-08-2013 01:27:52

Hola a todos.
Gracias por sus respuestas.

Efectivamente conozco tanto el número de filas como de columnas.

Voy a probar lo que me comentan y comentaré el resultado.

Muchas gracias.

darkone2k4 21-08-2013 19:38:47

Gracias a sus consejos, pude lograr lo que necesitaba.

salu2.


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

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