Форум: "Потрепаться";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
ВнизПодскажите как оптимизировать код. Найти похожие ветки
← →
Zhenka (2003-09-03 08:47) [0]var f:TStringList;
j,ffs:integer;
begin
if OpenDialog2.Execute= true then
begin
f:=TStringList.Create;
f.LoadFromFile(opendialog2.FileName);
FFS:= f.Count-1 ;
for j:=0 to FFS do
begin
if f.IndexOf("END")<> -1 then
f.Delete(f.IndexOf("END"));
end;
f.SaveToFile(opendialog2.FileName+"ff");
ListBox2.Items.LoadFromFile(opendialog2.FileName+"ff");
еnd;
end;
Господа этот код удаляет из файла типа
1
25031.750000 32002.453125
25031.750000 31996.205078
25032.343750 31988.470703
END
2
25051.994141 31726.025391
25054.875000 31725.724609
25057.035156 31725.125000
END
итд.
слова
но когда размер файла более 1 мб
то процесс затягивается на неопределенное время
подскажите пожалуйста как его переписать подругому???
(потоки, динамич. выд.памяти, или как нибудь ещё)
Спасибо.
← →
Palladin (2003-09-03 08:54) [1]вместо LoadFromFile используй
AssignFile/Reset/Readln
← →
Dmitriy O. (2003-09-03 08:56) [2]А память кто освобождать будет -> типа f.free
← →
Song (2003-09-03 09:03) [3]А зачем переменная FFS ?
← →
Ублюдок (2003-09-03 09:11) [4]var f:TStringList;
j,ffs:integer;
boZhenka : boolean;
begin
if OpenDialog2.Execute= true then
begin
f:=TStringList.Create;
f.LoadFromFile(opendialog2.FileName);
boZhenka := True;
while boZhenka do
begin
if f.IndexOf("END")<> -1 then
f.Delete(f.IndexOf("END"))
else boZhenka := False;
end;
f.SaveToFile(opendialog2.FileName+"ff");
ListBox2.Items.LoadFromFile(opendialog2.FileName+"ff");
еnd;
end;
← →
Ублюдок (2003-09-03 09:14) [5]Вай, еще одну твою дурость не заметил ...
Еще раз
var f:TStringList;
j,ffs:integer;
boZhenka : boolean;
begin
if OpenDialog2.Execute= true then
begin
f:=TStringList.Create;
f.LoadFromFile(opendialog2.FileName);
boZhenka := True;
while boZhenka do
begin
ffs := f.IndexOf("END");
if ffs <> -1 then
f.Delete(ffs)
else boZhenka := False;
end;
f.SaveToFile(opendialog2.FileName+"ff");
ListBox2.Items.LoadFromFile(opendialog2.FileName+"ff");
еnd;
end;
← →
Anatoly Podgoretsky (2003-09-03 09:17) [6]И вот еше одна дурость
f.SaveToFile(opendialog2.FileName+"ff");
ListBox2.Items.LoadFromFile(opendialog2.FileName+"ff");
Зачем повторно загрузать файл, когда данные уже есть в памяти, в f
← →
Nikolay M. (2003-09-03 09:50) [7]И я тоже добавлю...
Имхо, не for j:=0 to FFS do
а for j := FFS downto 0 do
ПС
Ну, а работать с файлами, не загружая их целиком в память, мы, конечно, не умеем...
← →
Anatoly Podgoretsky (2003-09-03 11:47) [8]Nikolay M. © (03.09.03 09:50) [7]
Это уже не к оптимизации, а к ошибкам, грубым притом. Но что такое downto не каждый знает. А по оптимизации основные пути наметили, есть для него основа.
← →
Nikolay M. (2003-09-03 11:53) [9]
> Это уже не к оптимизации, а к ошибкам, грубым притом.
А по оптимизации - это у меня в ПС написано :)
← →
jack128 (2003-09-03 12:04) [10]Зачем в цикле юзать IndexOf?
я бы сделал так
i := 0;
while i < FFS do
begin
if f[i] <> "END" then inc(i)
else f.delete(i);
end;
← →
Sandman25 (2003-09-03 12:05) [11][10] jack128 © (03.09.03 12:04)
Если последняя строка = "END", будут проблемы на следующей итерации.
← →
jack128 (2003-09-03 12:06) [12]гм сорри
надо while i < f.Count - 1 do
← →
jack128 (2003-09-03 12:07) [13]что то я того, наверна пивка попить надо
while i < f.Count do
← →
Zhenka (2003-09-04 06:44) [14]Спасибо . посмотрю
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.09.22;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.011 c