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)] - та же картина.


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, Я, я]


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

Наверх

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