Форум: "Начинающим";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];
ВнизВ ЧЕМ ОШИБКА??? Найти похожие ветки
← →
zzz0001 (2007-09-09 13:56) [0]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];
← →
Palladin © (2007-09-09 14:03) [1]куда вылетает? в астрал?
границы массива/списка или чего у тебя там проверь
← →
zzz0001 (2007-09-09 14:06) [2]на ошибку оут оф ранж
хотя первый символ на 18 позиции последний на 31
куда там вылетать не ясно
← →
Anatoly Podgoretsky © (2007-09-09 14:14) [3]> zzz0001 (09.09.2007 13:56:00) [0]
Еще один партизан сегодня.
И просто удивительно если подобный код будет работать.
Не единой проверки на допустимость.
← →
zzz0001 (2007-09-09 17:06) [4]я же сказал - превышения нету
почему ошибку дает?
← →
Palladin © (2007-09-09 17:07) [5]ну как нету если пишет
← →
ProgRAMmer Dimonych © (2007-09-09 17:28) [6]Так, я не поленился на этот раз вникнуть в чужой код.
Начну с того, что судя по всему эта функция предназначена для выполнения каких-то действий с адресами электронной почты...
Недостающий 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;
Теперь если убрать пробелы в начале и конце входной строки - работа алгоритма становится непредсказуемой. Инициализация переменных - придумана не мной и не мной должна быть реализована.
Устраняем ошибки, думаем, а я ещё загляну и, если возникнут вопросы, помогу.
← →
DrPass © (2007-09-09 17:34) [7]
> ProgRAMmer Dimonych © (09.09.07 17:28) [6]
> Так, я не поленился на этот раз вникнуть в чужой код.
Смотри, Ктулху уже подбирается к твоему моску
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.10.07;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c