Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.22;
Скачать: CL | DM;

Вниз

Подскажите как оптимизировать код.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.029 c
1-71737
bon
2003-09-10 14:07
2003.09.22
вопрос


1-71726
borg
2003-09-10 15:14
2003.09.22
Курсор


14-71890
Alex21
2003-09-03 17:18
2003.09.22
Как проследить в какие окна , проги и доки заходил USER


7-71982
Alexkav
2003-07-09 12:12
2003.09.22
Запуск и останов службы


1-71672
First_May
2003-09-11 11:48
2003.09.22
Файл ресурсов....