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

Вниз

В ЧЕМ ОШИБКА???   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.019 c
10-1138014152
Zhenya
2006-01-23 14:02
2007.10.07
OLE соединение Delphi 6 и 1C


2-1189493063
tomkat
2007-09-11 10:44
2007.10.07
поиск подкаталогов


2-1189439590
новичёк
2007-09-10 19:53
2007.10.07
Добавление форматированного куска в TRichEdit


2-1189413540
BenGen
2007-09-10 12:39
2007.10.07
Приложение (сервис) - как сие организовать в Deiphi?


15-1189341635
AntiUser
2007-09-09 16:40
2007.10.07
Создан трехмерный голографический дисплей