Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
6-1170855151
Zelius
2007-02-07 16:32
2007.10.07
Можно ли скрестить Indy TidHTTP и NTML аутентификацию?


2-1189438763
Jimmy
2007-09-10 19:39
2007.10.07
Собственная иконка своего компонента


15-1189081731
botaniq
2007-09-06 16:28
2007.10.07
Сколько стоит агента построить?


4-1174905395
zero
2007-03-26 14:36
2007.10.07
Обмен данными между процессами


15-1189171614
Gadenysh
2007-09-07 17:26
2007.10.07
Почему все неприятности у клиентов случаются





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский