![]() |
| ||
|
|
Новости |
Поиск |
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:38:00) [41]> pavel_guzhanov (15.11.2006 12:28:15) [15]
> Но тогда почему вчера работало именно с i , а сегодня с i-1?
Так звезды сложились. После завтра возможно потребуется i-2
Anatoly Podgoretsky (2006-11-15 12:37:00) [42]> Percent (15.11.2006 12:24:12) [12]
Ли Иванович Иванов
Сражу говорю - это женщина.
Anatoly Podgoretsky (2006-11-15 12:35:00) [43]
> Индексация с 0 до length - 1, т.е. до high(arMy)
От тебе это по почте сообщил?
Anatoly Podgoretsky (2006-11-15 12:34:00) [44]> pavel_guzhanov (15.11.2006 12:17:07) [7]
Слушай, а может у тебя не строки, поскольку в строке это все таки Length=High
Ты не говоришь нам всю правду. А может у тебя вообще Length не имеет отношения к последней букве строки.
Нельзя же быть таким молчаливым, хотя тебе можно.
Percent (2006-11-15 12:33:00) [45]это кто?
"Нет данных".
Anatoly Podgoretsky (2006-11-15 12:32:00) [46]> Elen (15.11.2006 12:05:02) [2]
Но он то пытается по предпоследней букве и если отчетство не указано, то пол мужской.
clickmaker (2006-11-15 12:31:00) [47]
> SEX := 'Н/д';
это кто?
Percent (2006-11-15 12:31:00) [48]Автор пишет :MIDDL_NAME. Думаю что это имя без фамилии
А я, все же, настаиваю, что это отчество.
Percent (2006-11-15 12:29:00) [49]Сделай так:
MIDDL_NAME := Trim(MIDDL_NAME);
i := Length(MIDDL_NAME);
if i > 0 then
begin
s := Copy(MIDDL_NAME, i, 1);
if UpperCase(s) = 'А' then
SEX := 'Жен'
else
SEX := 'Муж'
end
else
SEX := 'Н/д';
Elen (2006-11-15 12:29:00) [50]
> У него Павел Глоба сойдет за "Ж":)
Автор пишет :MIDDL_NAME. Думаю что это имя без фамилии
Интересно какой пол у него будет для имени Виктория.?
pavel_guzhanov (2006-11-15 12:28:00) [51]
> F1: массивы
>
> Индексация с 0 до length - 1, т.е. до high(arMy)
>
> Нельзя arMy[length(arMy)]
> У него Павел Глоба сойдет за "Ж":)
определяю по отчеству, а не по фамилии
> F1: массивы
>
> Индексация с 0 до length - 1, т.е. до high(arMy)
>
> Нельзя arMy[length(arMy)]
Понимаю и согласен. Но тогда почему вчера работало именно с i , а сегодня с i-1? А завтра будет опять работать с i.... Я с этой программкой работаю уже больше месяца, и постоянно такая фигня...
Jeer (2006-11-15 12:27:00) [52]
> Вообще-то речь про строки идёт.
>
Клинит к среде:)
Trim(s)
Плохиш (2006-11-15 12:25:00) [53]
> Jeer © (15.11.06 12:21) [9]
Вообще-то речь про строки идёт.
> pavel_guzhanov © (15.11.06 12:17) [7]
Про возможное наличие пробелов здесь уже говорили.
Percent (2006-11-15 12:24:00) [54]У него Павел Глоба сойдет за "Ж":)
Вряд ли. Анализируется отчество.
pavel_guzhanov (2006-11-15 12:22:00) [55]
> Оригинальный способ определения пола. Может, проще спросить
> ?
Часто достаточно бывает вообще взглянуть. Но, когда приходит файл xls и со списком примерно человек на 500, и из него надо извлечь информацию, в том числе и ту, которой там явно нет (например про пол человека), то приходится пытаться это автоматизировать....
Jeer (2006-11-15 12:21:00) [56]
> Игорь Шевченко © (15.11.06 12:20) [8]
У него Павел Глоба сойдет за "Ж":)
Jeer (2006-11-15 12:21:00) [57]pavel_guzhanov © (15.11.06 12:17) [7]
F1: массивы
Индексация с 0 до length - 1, т.е. до high(arMy)
Нельзя arMy[length(arMy)]
Игорь Шевченко (2006-11-15 12:20:00) [58]Оригинальный способ определения пола. Может, проще спросить ?
pavel_guzhanov (2006-11-15 12:17:00) [59]
> Странный алгоритм, по нему выходит, что тебе именно предпоследнея
> буква нужна, а пот почему ты иногда получаешь последнею
> не ясно, может когда длина равна 1
это я скопировал из сегодняшнего кода, т.к. при втором параметре 'i' я получал пустую строку, а при i-1 как раз последняя буква. Завтра, стопудово, будет нужно поставить i-1 ... Длина ВСЕГДА больше 1.
> А что s:=MIDDL_NAME[length(MIDDL_NAME)] уже не модно?
я написал в постскриптуме вопроса, что это ничего не дает...
KilkennyCat (2006-11-15 12:10:00) [60]я бы делал проверкой in [A, a, A, a, Я, я]