Veo que en medio del cálculo y escritura al fichero vas rellenando un TStringGrid (form1.stringgrid7).
recorres 8784 ficheros
1 Agregas 4 filas con con las 4 primeras columnas rellenadas con datos que lees.
2 Agregas tantas columnas como filas tenga el fichero
3 Escribes la tercera línea insertada al fichero de texto.
Esto genera un StringGrid enorme (8784 lineas x Tantas columnas como el fichero más grande leido(3600)).
8.784 x 3.600 = 31.622.400 celdas
Parece que todos contienen número convertidos a texto (aparentemente de 4 dígitos de máximo.)
Sin contar datos para la estructura (punteros, RTTI, y otros datos de control de StringGrid) tienes en memoria 126.489.600 bytes
Si no me he equivocado en las cuentas tienes
126 MB de memoria ocupada por el StringGrid.
Dado que no creo que estés mostrando el progreso en pantalla mediante el StringGrid, supongo que lo mas sensato es no utilizarlo y hacer algo mucho mas simple
He comentado el codigo a reemplazar, pero he dejado la parte donde rellenas las primeras 4 columnas del StringGrid con datos del fichero importado.
8.784 x 4 x 4bytes = 140.544 bytes (140 KB)
Código Delphi
[-]
procedure lector;
var
i, j : integer;
milista : TStringList;
s, aux : string;
F : TextFile;
FileName : string;
begin
FileName := dirE + 'final.txt';
AssignFile(F, FileName);
try
Rewrite(F);
milista := TStringList.Create;
try
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;
j := 4;
aux := copy(milista.Strings[j+2], 28, 10);
for j := 5 to milista.Count-3 do begin
aux := aux + ' ' + copy(milista.Strings[j+2], 28, 10);
end;
WriteLn(F, aux);
end;
milista.Clear;
end;
finally
milista.Free;
end;
CloseFile(F);
except
on e: Exception do
ShowMessage('Error al crear fichero : ' + FileName + #13#10 + e.Message);
end;
end;