Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Интересное поведение функции Length() [D7, XP]


Страницы:   1 2 3 4

pavel_guzhanov ©   (2006-11-15 12:01:00) 

В программе для определения пола человека использую такую вещь:
    i:=Length(MIDDL_NAME);
     s:=copy(MIDDL_NAME, i-1, 1);
     if uppercase(s)='А' then
       SEX:='Жен'
     else
       SEX:='Муж';

где MIDDL_NAME - отчество.  вроде все работает. Переменные i и s введены для контроля. Так вот, в какие-то дни этот код работает нормально, а в какие-то - s получается равным не последней букве MIDDL_NAME, а предпоследней. Тогда я меняю второй параметр функции copy с i-1 на i, и опять какое-то время все работает нормально. Но, в какой-то день s начинает принимать значение ''. Опять меняю i на i-1, и опять все работает. И так бесконечно. Программка написана только для меня, поэтому как-то справляюсь, но есть опасение, что такое же может возникнуть и в других программах. Подскажите, отчего такое происходит, и как с этим бороться?

ps если использовать MIDDl_NAME[length(MIDDL_NAME)] - та же картина.


pavel_guzhanov   (2006-11-17 11:19:00) [1]

Спасибо всем, кто пытался помочь! Помогла Trim (не учел я, что заполняющие файл в экселе могут после отчества еще и пробел воткнуть :0)), и, естественно, AnsiUpperCase.

Спасибо!


Leonid Troyanovsky   (2006-11-16 18:46:00) [2]


> RASkov   (16.11.06 18:40) [63]

> Ух.. неужто все кончилось:)


Зря ты не регистрируешься.

Ну, ладно, ухожу-ухожу.

--
Regards, LVT.


RASkov   (2006-11-16 18:40:00) [3]

Ух.. неужто все кончилось:)
> [62] Amoeba ©   (16.11.06 18:23)

Бывает:) Непереживай.


Amoeba   (2006-11-16 18:23:00) [4]


> RASkov   (16.11.06 18:20) [61]
> > [58] Amoeba ©   (16.11.06 15:39)
>
> Если, что - я вопросов здесь не задавал.

Нда, действительно... Перепутал. В таком случае прими мои извинения за наезд не по адресу.


RASkov   (2006-11-16 18:20:00) [5]

> [58] Amoeba ©   (16.11.06 15:39)

Если, что - я вопросов здесь не задавал.

> [59] Anatoly Podgoretsky ©   (16.11.06 16:15)

Я согласен с Вами и я как бы подвел итог вопроса автора. И тут Amoeba....
Ладно, как бы то нибыло здесь отвечать, кроме автору, больше не буду.


Anatoly Podgoretsky   (2006-11-16 16:15:00) [6]

> RASkov  (16.11.2006 15:20:57)  [57]

> Что же Вы сразу Trim то не сделали? А?

Никакого А, как только возникла подобная необходимость, а есть она или нет - автор то молчит, так сразу возник TRIM.
А как только возникла необходимость в преобразовании в Верхний регист, то надо было сразу указывать ANSI функцию, посколько про русский язык было известно сразу.

Так что не А, а О


Anatoly Podgoretsky   (2006-11-16 16:15:00) [7]

> Amoeba  (16.11.2006 15:39:58)  [58]

Не LOL, а провокация, потом очередное по счету оправдание за код.


Amoeba   (2006-11-16 15:39:00) [8]


> Я не понял, че вы ко мне привязались?:)))

Зачем нужно было демонстрировать в своем вопросе заведомо некорректный код, тем более, что Вы с самого начала знали (судя по Вашей реакции), в чем его некорректность (UpperCase а не AnsiUpperCase)?

Поэтому и LOL.


RASkov   (2006-11-16 15:20:00) [9]


> [48] Amoeba ©   (16.11.06 15:09)

> Так что, прежде чем анализировать строку,  для начала надо
> ей Trim сделать.

Тоже самое и Вам скажу - Что же Вы сразу Trim то не сделали? А?
:)))


RASkov   (2006-11-16 15:14:00) [10]

> Если знаешь, то какого черта сам на заменил в коде UpperCase

Я не понял, че вы ко мне привязались?:)))
В каком коде, я по Вашему должен был чего-то заменить?:)))
Это у меня LOL.


Amoeba   (2006-11-16 15:09:00) [11]


> RASkov   (16.11.06 14:20) [54]
> > [52] Amoeba ©   (16.11.06 11:41)
>
> А нафик мне это было говорить?
> :)
> > и еще ноешь, что "И еще UpperCase не работает с русскими
>
> > символами"?
>
> Я не ною, а указал на факт.


LOL!


RASkov   (2006-11-16 14:20:00) [12]

> [52] Amoeba ©   (16.11.06 11:41)

А нафик мне это было говорить?
:)
> и еще ноешь, что "И еще UpperCase не работает с русскими
> символами"?

Я не ною, а указал на факт.


Mikhail V   (2006-11-16 11:48:00) [13]

Автор, тебе библиотечку кинуть для подобного "рода" деятельности?


Amoeba   (2006-11-16 11:41:00) [14]


> RASkov   (15.11.06 19:53) [51]
> > [50] Андрей Сенченко ©   (15.11.06 19:51)
>
> Это я знаю.
> Но в примерах то здесь везде UpperCase

Если знаешь, то какого черта сам на заменил в коде UpperCase на AnsiUpperCase (религия не позволяет?!) и еще ноешь, что " И еще UpperCase не работает с русскими символами"?


RASkov   (2006-11-15 19:53:00) [15]

> [50] Андрей Сенченко ©   (15.11.06 19:51)

Это я знаю.
Но в примерах то здесь везде UpperCase


Андрей Сенченко   (2006-11-15 19:51:00) [16]

RASkov  

И еще UpperCase не работает с русскими символами,

С ними работает AnsiUpperCase


RASkov   (2006-11-15 18:24:00) [17]

> MIDDL_NAME := Trim(MIDDL_NAME);

[17] Возможно пробел имеет место быть.
И еще UpperCase не работает с русскими символами, покрайней мере у меня так
ShowMessage(UpperCase('а')); показывает - а //символ "а" русский
у меня D7 WinXP SP2 Rus


Amoeba   (2006-11-15 17:56:00) [18]


> Anatoly Podgoretsky ©   (15.11.06 13:37) [41]
> > pavel_guzhanov  (15.11.2006 13:25:37)  [37]
>
> А оканчивающее на пробел можешь представить?

А ведь такое запосто может быть... Так что, прежде чем анализировать строку,  для начала надо ей Trim сделать. IMHO вещь в данном случае очевидная (может здесь одни из граблей и лежат?).


Игорь Шевченко   (2006-11-15 15:27:00) [19]

KilkennyCat ©   (15.11.06 13:51) [45]

В смысле нет данных


Jeer   (2006-11-15 14:14:00) [20]


> KilkennyCat ©   (15.11.06 13:40) [42]


Чтобы ты сказал о таких ценниках ?
"Блазгогупцы"
"Мужской дуфля"
"Гаструлка"
и тп.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо