Ver Mensaje Individual
  #1  
Antiguo 18-11-2022
Anel Hernandez Anel Hernandez is offline
Miembro
 
Registrado: mar 2005
Posts: 94
Reputación: 20
Anel Hernandez Va por buen camino
out of memory usando TStringList

hola,


Debo leer 8784 ficheros de texto con 3600 lineas con datos numericos cada uno. De cada uno de ellos debo seleccionar un dato x cada linea, y convertirlos a una fila con los 3600 datos copiados. Y luego con cada linea hacer un fichero final con 366 lineas, cada una con 3600 datos numericos.
Leo sin problema los 8784 ficheros iniciales, los organizo en un stringgrid para ir monitoriando que todo esta ok y luego los adiciono a un stringlist para salvarlo a un nuevo fichero con todos los datos organizados.
La tabla lleva 3 filas encima con encabezados de tabla que se incluyen tambien en el fichero final.
Funciona correctamente hasta el fichero 6378 que crea un fichero nuevo de 240 MB.
Pero cuando intento añadir mas ficheros da error "out of memory".
Les dejo mi codigo para que me digan que pudiera hacer diferente.


Código Delphi [-]
procedure lector;
var
  i,j:integer;
  milista,listafinal:TStringList;
  s:string;
begin
 milista:=TStringList.Create;
 listafinal:=TStringList.Create;
 for i := 0 to form1.CheckListBox1.Count-1 do begin
  Application.ProcessMessages;
  if form1.CheckListBox1.Checked[i] then begin
   milista.LoadFromFile(form1.CheckListBox1.Items[i]);
   form1.stringgrid7.Cells[0,i+3]:=inttostr(i+1);
   s:=ExtractFileName(form1.checklistbox1.items.Strings[i]); 
   form1.stringgrid7.Cells[1,i+3]:=copy(s,0,4);
   form1.stringgrid7.Cells[2,i+3]:=inttostr(Juliana(copy(s,0,13)));
   form1.stringgrid7.Cells[3,i+3]:=copy(s,14,4);
   form1.stringgrid7.rowCount:=i+4;
   for j:=4 to milista.Count-3 do begin
    if i=0 then begin // pongo los encabezados de tabla
     form1.stringgrid7.colCount:=j+1;
     form1.stringgrid7.Cells[j,0]:=inttostr(j-3-numX*trunc((j-4)/numX));
     form1.stringgrid7.Cells[j,1]:=inttostr( trunc((j-4)/numY)+1 );
     form1.stringgrid7.Cells[j,2]:=inttostr(j-3);
    end;
    form1.stringgrid7.Cells[j,i+3]:=copy(milista.Strings[j+2],28,10);
   end;

   form1.stringgrid7.Rows[i+3].Delimiter:=' ';
   listafinal.Add(form1.stringgrid7.Rows[i+3].DelimitedText);

  end;
  milista.Clear;
 end;
 milista.Free;
 listafinal.SaveToFile(dirE+'final.txt'); //aqui es donde da el error
 listafinal.Free;
end;
Gracias,
A
Responder Con Cita