![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
В ЧЕМ ОШИБКА???
zzz0001 © (2007-09-09 13:56:00)function getmail(st:string) : string;
var
numst : integer;
numbegin : integer;
numend : integer;
getmails : string;
getmailsn : integer;
begin
if Pos('@',st) > 0 then
begin
numst := Pos('@',st);
while st[numst] <> ' ' do
begin
dec(numst);
end;
numbegin := numst;
numst := Pos('@',st);
while st[numst] <> ' ' do
begin
inc(numst);
end;
numend := numst;
getmailsn := 0;
for numst := numbegin to numend do
begin
showmessage(inttostr(numst));
getmails[getmailsn] := st[numst];
inc(getmailsn);
end;
getmail := getmails;
end;
****
Вылетает на getmails[getmailsn] := st[numst];
DrPass (2007-09-09 17:34:00) [1]
> ProgRAMmer Dimonych © (09.09.07 17:28) [6]
> Так, я не поленился на этот раз вникнуть в чужой код.
Смотри, Ктулху уже подбирается к твоему моску
ProgRAMmer Dimonych (2007-09-09 17:28:00) [2]Так, я не поленился на этот раз вникнуть в чужой код.
Начну с того, что судя по всему эта функция предназначена для выполнения каких-то действий с адресами электронной почты...
Недостающий end в конце я добавил...
> function getmail(st:string) : string;
> var
> numst : integer;
> numbegin : integer;
> numend : integer;
> getmails : string;
> getmailsn : integer;
Здесь всё понятно: По E-Mail'у генерируем серийный номер. :)
Возьмём, скажем, str=' aaa@bbb.ccc '...
> begin
> if Pos('@',st) > 0 then
> begin
> numst := Pos('@',st);
> while st[numst] <> ' ' do
> begin
> dec(numst);
> end;
Интересный способ убрать лишние пробелы в начале строки...
> numbegin := numst;
NumBegin теперь указывает на последний пробел перед '@'.
> numst := Pos('@',st);
> while st[numst] <> ' ' do
> begin
> inc(numst);
> end;
> numend := numst;
Не менее интересный способ удаления пробелов из конца строки. NumEnd указывает на первый пробел в адресе электронной почты.
> getmailsn := 0;
> for numst := numbegin to numend do
> begin
> showmessage(inttostr(numst));
> getmails[getmailsn] := st[numst];
> inc(getmailsn);
> end;
Хм, а GetMails:=Copy(St,NumBegin,NumEnd-NumBegin+1) не катит? И, кстати, GetMails ранее нигде не используется и не инициализируется, так что в лучшем случае - обращение к символу номер 0, который... Чего-то у меня всю жизнь нумерация с 1 начинается...
> getmail := getmails;
> end;
> end;
Теперь если убрать пробелы в начале и конце входной строки - работа алгоритма становится непредсказуемой. Инициализация переменных - придумана не мной и не мной должна быть реализована.
Устраняем ошибки, думаем, а я ещё загляну и, если возникнут вопросы, помогу.
Palladin (2007-09-09 17:07:00) [3]ну как нету если пишет
zzz0001 (2007-09-09 17:06:00) [4]я же сказал - превышения нету
почему ошибку дает?
Anatoly Podgoretsky (2007-09-09 14:14:00) [5]> zzz0001 (09.09.2007 13:56:00) [0]
Еще один партизан сегодня.
И просто удивительно если подобный код будет работать.
Не единой проверки на допустимость.
zzz0001 (2007-09-09 14:06:00) [6]на ошибку оут оф ранж
хотя первый символ на 18 позиции последний на 31
куда там вылетать не ясно
Palladin (2007-09-09 14:03:00) [7]куда вылетает? в астрал?
границы массива/списка или чего у тебя там проверь