Форум: "Начинающим";
Текущий архив: 2016.02.14;
Скачать: [xml.tar.bz2];
Внизкуда уходит память? Найти похожие ветки
← →
tippa (2014-07-26 17:56) [0]
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
classes,
windows;
var list:TStringList;
i:integer;
procedure pars(str:string);
var l:TstringList;
buf:string;
begin
l:=TStringList.Create;
l.LoadFromFile(str);
buf:=l.Text;
repeat
if pos("<td> <i class="muted" style="font-size:small">",buf)=0 then break;
delete(buf,1,pos("<td> <i class="muted" style="font-size:small">",buf)+45);
delete(buf,1,pos("href="/node/",buf)+11);
list.Add(copy(buf,1,pos(""",buf)-1));
until false;
l.Free;
end;
procedure obxod1(path:string);
var
FD : TWin32FindData;
FH : THandle;
begin
FH := FindFirstFile(PChar(path+"*.*"), FD);
repeat
if (FH<>INVALID_HANDLE_VALUE) and (FD.cFileName<>string(".")) and (FD.cFileName<>string("..")) then
begin
if (FD.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY then
begin
obxod1(path+FD.cFileName+"\");
end
else pars(path+FD.cFileName);
//list.Add(path+FD.cFileName);
end;
until FindNextFile(FH, FD) = false;
end;
begin
list:=TStringList.Create;
obxod1("folder1\");
list.SaveToFile("result.txt");
list.Free;
end.
перебираю все файлы в папке, каждый файл гружу в стринглист [l], выдираю из него нужное и это нужное записываю в результирующий стринглист [list]. Но уже при 100к строк программе не хватает памяти, причем одна строка в стрингисте [list] - это максимум 20 символов. Подскажите где наврал?
← →
RWolf © (2014-07-26 19:11) [1]если list нужен только для накопления строк, почему бы сразу не писать их в файл?
var f:TextFile;
...
writeln(f, copy(buf,1,pos(""",buf)-1));
← →
tippa (2014-07-26 19:21) [2]да, так будет лучше, спасибо
← →
MBo © (2014-07-27 14:24) [3]на будущее - успешный вызов FindFirstFile должен сопровождаться FindClose
← →
Dennis I. Komarov © (2014-08-06 12:31) [4]и в try/finally оберни
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2016.02.14;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.002 c