![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Интересное поведение функции Length() [D7, XP]
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)] - та же картина.
Anatoly Podgoretsky (2006-11-15 12:09:00) [61]> pavel_guzhanov (15.11.2006 12:01:00) [0]
Странный алгоритм, по нему выходит, что тебе именно предпоследнея буква нужна, а пот почему ты иногда получаешь последнею не ясно, может когда длина равна 1
Jeer (2006-11-15 12:08:00) [62]Будь проще:
if Middle_Name[High(Middle_Name)] =..
else
..
Elen (2006-11-15 12:07:00) [63]
> pavel_guzhanov
Может поможет сделать для строки IDDL_NAME фиксированный размер?
Elen (2006-11-15 12:05:00) [64]
> s:=copy(MIDDL_NAME, i-1, 1);
А чтоs:=MIDDL_NAME[length(MIDDL_NAME)]уже не модно?
ProgRAMmer Dimonych (2006-11-15 12:02:00) [65]Гюк, наверное. Переставить пора...
Попробуй для разнообразия ANSIUpperCase и RightStr... Или это трубопаскакаль?