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

Вниз

Оптимизация   Найти похожие ветки 

 
Res   (2008-02-06 01:47) [0]

Здравствуйте! Помогите оптимизировать код. Постоянно вылетает Out memory...
Размер текстового файла 150мб. Код:

var
classname:string;
ai:TTntStrings;
ainew:TTntStrings;
int:array[1..10] of integer;
error:boolean;
begin
error:=False;
classname:=searchclass(form1.Memo1.Text);
if (searchclass(form1.Memo1.Text)="") then
begin
form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Ошибка! Пожалуйста вставьте Класс (поле пустое или не имеет класса) !");
end
else
 begin
 ai:=TTntstringlist.Create; //Создаю
 ainew:=TTntstringlist.Create; //Создаю
 end;
 try
 ai.LoadFromFile(form1.Edit1.Text);
 except
 form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Ошибка! Невозможно открыть файл!");
 error:=True;
 end;
 if error=True then
 begin
 form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Ошибка! Невозможно изменить класс1!");
 end
 else
 begin
 int[1]:=Pos(classname, ai.Text);
 int[2]:=PosEx("class_end", ai.Text, int[1]+1);
     if(int[1]<>0) then
     begin
     try
     ainew.Add(copy(ai.text,1, int[1]-1));
     ainew.Add(form1.Memo1.Text);
     ainew.Add(copy(ai.text,int[2]+1, length(ai.Text)));
     form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Класс успешно заменен!");
     except
     form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Ошибка! Невозможно заменить класс2!");
     end;
     ainew.SaveToFile(form1.Edit1.Text);
     form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Файл успешно сохранен!");
     end
     else
     begin
     form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Ошибка! Класс не найден!3");
     end;
 end;
ai.Free;
ainew.Free;
form1.Button2.Enabled:=True;
end;


 
Германн ©   (2008-02-06 01:49) [1]


> Res   (06.02.08 01:47)

Без нормального форматирования код не читаем.


 
Res   (2008-02-06 02:19) [2]


var
 classname:string;
 ai:TTntStrings;
 ainew:TTntStrings;
 int:array[1..10] of integer;
 error:boolean;
begin
error:=False;
classname:=searchclass(form1.Memo1.Text);
if (searchclass(form1.Memo1.Text)="") then
 begin
 form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Ошибка! Пожалуйста вставьте Класс (поле пустое или не имеет класса) !");
 end
else
 begin
 ai:=TTntstringlist.Create; //Создаю
 ainew:=TTntstringlist.Create; //Создаю
 end;
   try
 ai.LoadFromFile(form1.Edit1.Text);
   except
   form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Ошибка! Невозможно открыть файл!");
   error:=True;
   end;
   if error=True then
       begin
       form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Ошибка! Невозможно изменить класс1!");
       end
   else
       begin
       int[1]:=Pos(classname, ai.Text);
       int[2]:=PosEx("class_end", ai.Text, int[1]+1);
               if(int[1]<>0) then
                     begin
                           try
                     ainew.Add(copy(ai.text,1, int[1]-1));
                     ainew.Add(form1.Memo1.Text);
                     ainew.Add(copy(ai.text,int[2]+1, length(ai.Text)));
                     form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Класс успешно заменен!");
                           except
                           form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Ошибка! Невозможно заменить класс2!");
                           end;
       ainew.SaveToFile(form1.Edit1.Text);
       form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Файл успешно сохранен!");
       end
     else
       begin
     form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Ошибка! Класс не найден!3");
       end;
 end;
ai.Free;
ainew.Free;
form1.Button2.Enabled:=True;
end;


 
Slym ©   (2008-02-06 05:21) [3]

if (classname="") then
begin
 form1.Memo2.Lines.Add("["+Datetostr(Date)+"  "+timetostr(Time)+"]"+" Ошибка! Пожалуйста вставьте Класс (поле пустое или не имеет класса) !");
 exit;
end else ...


 
Slym ©   (2008-02-06 05:52) [4]

проверяй

var
classname:string;
Stream:TFileStream;
ai,ainew:string;
b,e:integer;
begin
 try
   classname:=searchclass(Memo1.Text);
   if classname="" then
     raise Exception.Create("Пожалуйста вставьте Класс (поле пустое или не имеет класса)!");
   Stream:=TFileStream.Create(Edit1.Text, fmOpenRead or fmShareDenyWrite);
   try
     SetLength(ai,Stream.Size);
     Stream.ReadBuffer(ai,Length(ai));
   finally
     Stream.Free;
   end;
   b:=Pos(classname, ai);
   e:=PosEx("class_end", ai, b+1);
   if(b=0) then
     raise Exception.Create("Класс не найден!");
   ainew:=copy(ai,1,b-1)+#13#10+classname+#13#10+copy(ai,e+1, MaxInt);
   Stream:=TFileStream.Create(Edit1.Text, fmCreate);
   try
     Stream.WriteBuffer(ai,Length(ai));
   finally
     Stream.Free;
   end;
   Memo2.Lines.Add(FormatDateTime("[dd.mm.dddd hh:mm] Файл успешно сохранен!",Now));
 except
   on E:Exception do
     Memo2.Lines.Add(FormatDateTime("[dd.mm.dddd hh:mm]",Now)+"Ошибка! "+ E.Message);
 end;
 Button2.Enabled:=True;
end;



Страницы: 1 вся ветка

Текущий архив: 2008.03.02;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
15-1201589133
Andrewtitoff
2008-01-29 09:45
2008.03.02
В чем ошибка?


2-1202406703
Nemeziz
2008-02-07 20:51
2008.03.02
try..except


15-1201602429
hahol_64_rus
2008-01-29 13:27
2008.03.02
FastReport и Fireberd


15-1201363081
Константинов
2008-01-26 18:58
2008.03.02
Помогите с аской 5.1 человек ждет,


15-1201437254
Семеныч
2008-01-27 15:34
2008.03.02
Парадокс