PDA

Просмотр полной версии : [Delphi] памогите с функцией


cel
07.04.2010, 23:56
Вот функция:

function TForm1.Parsing(text:String): string;
var
i:integer;
Sk: TStringList;
NewMsg,name:string;
New:TStringList;
begin
sk:= TStringList.Create;
sk.Text:=text;
For I := 0 To sk.Count -1 do
begin
If Pos('id="homelink"', sk[I]) <> 0 Then
begin
id := sk[I];
id := Copy(id, Pos('href="', id), Length(id));
Delete(id, Pos('">', id),Length(id));
id := Copy(id, Pos('id', id), Length(id));
Delete(id, 1,2);
end;
end;

For I := 0 To sk.Count -1 do
begin
If Pos('<div class="shah">', sk[I]) <> 0 Then
begin
name := sk[I];
name := Copy(name, Pos('">', name), Length(name));
delete(name,Pos('<', name), Length(name));
delete(name, 1, 2);
end;
end;

For I := 0 To sk.Count -1 do
begin
If Pos('<a href="/mail.php?id=', sk[I]) <> 0 Then
begin
mesage := sk[I];
mesage := Copy(mesage, Pos('<a href="/mail.php?id=', mesage), 100);
if Pos('</b>', mesage) <>0 then
begin
delete(mesage, Pos('</b>', mesage),Length(mesage));
delete(mesage, Pos('<a href=', mesage),pos('(<b>',mesage));
delete(mesage, 1,3);
end
else
mesage:='нет';
end;
end;

if strtoint(id) <>0 then
begin
label3.Caption:='У вас '+mesage+' новых сообщений.';
Label1.Caption:='Здраствуйте '+name;
Label2.Caption:='Ваш ИД: '+id;
NewMsg:=name+', у вас '+mesage+' новых сообщений';
memo1.lines.add(NewMsg);
end
else
begin
NewMsg:='Вы не авторизованы!';
memo1.lines.add(NewMsg);
new.Free;
sk.Free;
end;


Она выдаёт ошибку когда её вызываеш опять другой кнопкой

projekt raised exception class EAccess Violation with message:" Access violation at address 00000020.Read of address 00000020",Progres stopped ...

И ещё вапрос,как сделать чтоб приложение ело меньше опиротивы??

DeepBlue7
07.04.2010, 23:59
И ещё вапрос,как сделать чтоб приложение ело меньше опиротивы??

Ну по конкретному приложению помочь немогу... а вообще - поменьше использовать "повторялки" одного и того-же кода...

cel
08.04.2010, 00:01
У меня нет "повторялок" кода)

[stranger]
08.04.2010, 00:02
не инициализирована new
добавь строчку new := TStringList.Create;

function TForm1.Parsing(text:String): string;
var
...
begin
new := TStringList.Create;
sk:= TStringList.Create;
sk.Text:=text;
...
end;

cel
08.04.2010, 00:12
добавил всеравно этоже ошибка

JnK
08.04.2010, 09:48
1. Код можно было уменьшить в 2, а то и в 3 раза. Как сказал DeepBlue7, повтор есть.
На пример: Цикл, зачем 3 раза, если можно 1 раз, всеравно нет глобально зависящих переменных.
2. Насчет ошибки, при повторном запуске он пробует считать данных которых нет. Следовательно F8 и смотри, где убиваются они.

cel
08.04.2010, 18:12
непамогло(((

Berman
08.04.2010, 18:22
free юзай не будет столько жрать

cel
08.04.2010, 18:39
юзаю

Chrome~
08.04.2010, 18:40
На выполнении какой строки ошибка происходит?

cel
08.04.2010, 18:43
на вызов функции показывает

Chrome~
08.04.2010, 18:45
А в функции на какой строке?

GhostOnline
08.04.2010, 21:03
Код ужасен, его невозможно читать.
Юзай регулярки. А если хочешь сэкономить память то создавай объект регулярки перед использованием и сразу уничтожай.
Кстати, установи себе EurekaLog, подключи к проекту и все утечки как на ладони, профит.

cel
09.04.2010, 01:04
Код ужасен, его невозможно читать.
Юзай регулярки. А если хочешь сэкономить память то создавай объект регулярки перед использованием и сразу уничтожай.
Кстати, установи себе EurekaLog, подключи к проекту и все утечки как на ладони, профит.
Ок пасмотрим)
в принцыпе немного изменив код(сразу вставил в кнопку) нашол проблемму, она вылетает на строке sk := TStringList.Create;