Главная страница
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.025 c
1-71686
Olexander
2003-09-11 11:21
2003.09.22
не срабатывает обработчик


1-71662
Vladislav
2003-09-08 16:44
2003.09.22
PDF viewer


14-71828
VictorT
2003-09-02 00:46
2003.09.22
Полуночники


1-71637
Max_
2003-09-09 10:31
2003.09.22
Глобальная переменная и её уничтожение!


1-71583
Alek Aaz
2003-09-09 13:33
2003.09.22
Печать на принтер