Главная страница
    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.045 c
15-1189417959
em240
2007-09-10 13:52
2007.10.07
VS2005+C# - не подключается using System.Messagin.


8-1166895180
nordic3
2006-12-23 20:33
2007.10.07
Скорость воспроизведения в Mediaplayer


2-1189150890
AlexGryb
2007-09-07 11:41
2007.10.07
Панэль задач


15-1189438911
oldman
2007-09-10 19:41
2007.10.07
А у нас вчера был день города...


11-1169888280
Моторокер
2007-01-27 11:58
2007.10.07
Форма и DLL. Архиваторный плагин





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский