powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / изменение окончания у фамилии
25 сообщений из 54, страница 1 из 3
изменение окончания у фамилии
    #33284757
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
поставили такую задучу: есть база данных с полем FIO в которм записаны фамилии и инициалы, причем записаны как попало, например есть такие записи

1. Иванов И.И.
2. Петровой П.П.
3. Сидоров
4. Иванова Ольга Ивановна

в общем все как попало...

моя задача такая:
каим-то образом из этих бредовых записей узнать пол человека (по крайней мере я себе это так представляю) чтобы из полученных записей получить данные в именительном и родительном падеже, т.е.

Иванов И.И. ; Иванову И.И.
Петрова П.П. ; Петровой П.П.
Сидоров ; Сидорову
Иванова Ольга Ивановна ; Ивановой Ольге Ивановне

у кого-нибудь имеется мнение:
1. Вообще реально ли такое?
2. Если реально подскажите пожалуйста как можно это реализовать?

----------------
данные:
база access 2000
записей порядка 150 000

я не представляю как такое вообще можно сделать на ВБ, знаю что такое вполне решаемо на ФоксПро, а как насчет ВБ?

любые советы, мнения очень приветствуются.
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33284820
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пол человека вполне возможно узнать по отчеству, проходит у большинства. У женщин окончание "на", у мужчин "ич". Я такое делал и при других окончаниях просто выводил диалог. По фамилии ничего сказать нельзя, поскольку большинство из них ничего не говорит о поле - Кравченко, Задерейчук, Акопян, Рабинович и т.д. (но такие фамилии тебя не должны беспокоить, поскольку не изменяются в любом падеже). Так что тебе я думаю стоит составить список окончаний М и Ж фамилий по падежам и на его основе что то думать о реальности. А в чем реализовывать не важно. Главное - алгоритм.
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33284990
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так алгоритм - это самое главное, хорошо бы если были все записи одинаковые, тогда задача былы бы намного проще, как я писал, записи настолько разнообразны, что нельзя даже самому понять с чего начать

1. Иванов И.И.
2. Петровой П.П.
3. Сидоров

например какой должен быть алгоритм для таких записей? я что-то даже не могу представить...
точнее могу, но думаю не правильно...
во первых единственная закономерность в этих записях - это фамилия, которая всегда первая по порядку, от этого я думаю стоит отталкиваться.
потом каким-то образом нужно узнать конец слова, и проверить его окончание.
как это сделать, понятия не имею...
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33285007
Если формат: Иванов А.А. - ищи позицию первого пробела и от него отнимай то количество символов, чтобы проанализировать оканчание фамилии. Если просто: Иванова - анализируй символы справа.
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33285056
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а помочь с кодом можете? как искать позицию пробела я не представляю...
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33285075
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нарыл вот прогу на Фокс Про, она как раз такое делает, что мне нужно... как разобраться что там делается и как, языки впринципе очень похожи, и думаю что код для моей ВБшной программы будет практически таким же
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
* Изменение фамилий
pokon=Right(ALLTRIM(famcl), 3 )
DO CASE
  *позиция окончания для женского пола
  CASE pokon='вой'
     okon=AT('вой',ALLTRIM(famcl))
     FIOIP=LEFT(ALLTRIM(famcl),okon)+'а'
     replace facl_ip WITH FIOIP, polcl WITH 'ж'
  CASE pokon='ной'
    okon=AT('ной',ALLTRIM(famcl))
    FIOIP=LEFT(ALLTRIM(famcl),okon)+'а'
    replace facl_ip WITH FIOIP, polcl WITH 'ж'
   CASE pokon='кой'
    okon=AT('кой',ALLTRIM(famcl))
    FIOIP=LEFT(ALLTRIM(famcl),okon- 1 )+'кая'
    replace facl_ip WITH FIOIP, polcl WITH 'ж'
    
    *позиция окончания для мужского пола
  CASE pokon='ову'
    okon=AT('ову',ALLTRIM(famcl))
    FIOIP=LEFT(ALLTRIM(famcl),okon)+'в'
    replace facl_ip WITH FIOIP, polcl WITH 'м'
  CASE pokon='ину'
    okon=AT('ину',ALLTRIM(famcl))
    FIOIP=LEFT(ALLTRIM(famcl),okon)+'н'
    replace facl_ip WITH FIOIP, polcl WITH 'м'
  CASE pokon='еву'
    okon=AT('еву',ALLTRIM(famcl))
    FIOIP=LEFT(ALLTRIM(famcl),okon)+'в'
    replace facl_ip WITH FIOIP, polcl WITH 'м'
  CASE pokon='ому'
    okon=AT('ому',ALLTRIM(famcl))
    FIOIP=LEFT(ALLTRIM(famcl),okon- 1 )+'ий'
    replace facl_ip WITH FIOIP, polcl WITH 'м'
  
  OTHERWISE
	FIOIP=ALLTRIM(famcl)
	replace facl_ip WITH FIOIP, polcl WITH 'н'
  ENDCASE
  * Изменение имен
  pokon=Right(ALLTRIM(namecl), 1 )
  DO CASE 
    *позиция окончания для мужского пола
  CASE pokon='у'
    okon=RAT('у',ALLTRIM(namecl))
    NAMEIP=LEFT(ALLTRIM(namecl),okon- 1 )
    replace nacl_ip WITH NAMEIP, obrcl WITH obr
  CASE pokon='ю'
    okon=RAT('ю',ALLTRIM(namecl))
    NAMEIP=LEFT(ALLTRIM(namecl),okon- 1 )+'й'
    replace nacl_ip WITH NAMEIP, obrcl WITH obr
     *позиция окончания для женского пола
   CASE pokon='е'
    okon=RAT('е',ALLTRIM(namecl))
    NAMEIP=IIF(ALLTRIM(namecl)='Зое',LEFT(ALLTRIM(namecl),okon-1)+'я',LEFT(ALLTRIM(namecl),okon-1)+'а')
    replace nacl_ip WITH NAMEIP, obrcl WITH obr
 
  OTHERWISE
	NAMEIP=ALLTRIM(namecl)
	replace nacl_ip WITH NAMEIP
  ENDCASE
  
  
  * Изменение отчества клиента
  pokon=Right(ALLTRIM(otchcl), 1 )
  DO CASE
   *позиция окончания для мужского пола
   CASE pokon='у'
    okon=RAT('у',ALLTRIM(otchcl))
    OTCL_IP=LEFT(ALLTRIM(otchcl),okon- 1 )
    replace otchcl_ip WITH OTCL_IP, polcl WITH 'м', obrcl WITH obr
   *позиция окончания для женского пола
   CASE pokon='е'
    okon=RAT('е',ALLTRIM(otchcl))
    OTCL_IP=LEFT(ALLTRIM(otchcl),okon- 1 )+'а'
    replace otchcl_ip WITH OTCL_IP, polcl WITH 'ж', obrcl WITH obr
   OTHERWISE
	OTCL_IP=ALLTRIM(otchcl)
	replace otchcl_ip WITH OTCL_IP
   
   ENDCASE
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33285135
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В форуме по SQL Server есть много работающих решений этой задачи.
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33285155
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторVisual Basic содержит две функции, позволяющие осуществлять поиск символьной строки в другой: inStr и inStrRev. Эти функции отличаются тем, что inStr осуществляет поиск с начала строки и до ее конца, а InStrRev проводит поиск в обратном направлении, то есть от конца строки к началу.

В твоем случае будет примерно так
Код: plaintext
pozition=InStr ("Иванов А.А.", " ") 
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33285197
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MelkiadesВ форуме по SQL Server есть много работающих решений этой задачи.
ткнуть можете я не нашел...
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33285230
Дурак
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shady MelkiadesВ форуме по SQL Server есть много работающих решений этой задачи.
ткнуть можете я не нашел...

Ищи, ищи дальше... (C) :-)
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33285245
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо, сейчас прочитаю все что там есть
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33285528
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все бы хорошо, если бы не мои дурацкие записи... они же все в одной ячейке.... и фамилия, и инициалы... хотя теоритечески, наверное можно как-то циклом проверить позцию пробелов.
так наблюдается алгоритм действий...
1. проверить позиции пробелов, и тем самым разделить все что находится в одной ячейке, на 3, фамилия, имя, отчество
2. проверить последние 3 буквы окончания фамилии на предмет определния пола 0, 1, 01 женщина, мужчина, и неопределенный пол
3. заменить последние 2 буквы согласно определенному полу

думаю такой должен быть алгоритм.
кому есть что добавить?
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286082
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы еще посоветовал
1. записать фамилии, имена и отчества в разные поля таблицы, в будующем чтоб такого гемороя не было;
2. Поскольку у тебя есть и инициалы, то после первого пробела искать еще и точки;
3. Сначала поверять строку вообще на наличие пробелов.
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286127
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyMpЯ бы еще посоветовал
1. записать фамилии, имена и отчества в разные поля таблицы, в будующем чтоб такого гемороя не было;
2. Поскольку у тебя есть и инициалы, то после первого пробела искать еще и точки;
3. Сначала поверять строку вообще на наличие пробелов.

как все это реализовать кодом? я говорю что не имею представления каким
образом работать с текстом который находится в ячейке, какие функции имеются в ВБ для работы с текстом? помогите кодом если не трудно
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286429
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, раз уж в форуме по Аксессу стоит ссылка сюда, то я сюда и пришел...

Во-первых, Иванову и Петровой - это не родительный падеж, а дательный.

Во-вторых, если даны только инициалы, то пол определить нельзя (даже по окончанию фамилии, потому что может быть мужская фамилия Скорина или женская Дарвин).

В-третьих, вот топик в Аксессе, где подробно обсуждаются все за и против и дается линк на программу, которая это делает:
http://sql.ru/forum/actualthread.aspx?tid=29283
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286444
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.
shady любые советы, мнения очень приветствуются.
Так вот мнение: какой-то процент неправильных решений все равно будет, а значит будет какое-то количество возмущенных писем от клиентов, получивших письмо "Шоте Какучей" (см. по моей ссылке, 17 апр 03, 13:56). Готова ли фирма с этим мириться? Имхо, оптимальное решение - это подход Виктора Сенина (там же, 17 апр 03, 14:03).
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286448
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyMpПо фамилии ничего сказать нельзя, поскольку большинство из них ничего не говорит о поле - Кравченко, Задерейчук, Акопян, Рабинович и т.д. (но такие фамилии тебя не должны беспокоить, поскольку не изменяются в любом падеже).
Это неверно. Три последних из 4 названных фамилий склоняются, если они принадлежат мужчинам. Моя фамилия - одного из этих типов, и я не очень рад, когда ее не склоняют, превращая меня в женщину.
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286460
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычНу, раз уж в форуме по Аксессу стоит ссылка сюда, то я сюда и пришел...

Во-первых, Иванову и Петровой - это не родительный падеж, а дательный.

Во-вторых, если даны только инициалы, то пол определить нельзя (даже по окончанию фамилии, потому что может быть мужская фамилия Скорина или женская Дарвин).

В-третьих, вот топик в Аксессе, где подробно обсуждаются все за и против и дается линк на программу, которая это делает:
http://sql.ru/forum/actualthread.aspx?tid=29283

уважаемый Владимир Саныч, мое начальство это не волнует, что из исходных данных нельзя выдрать пол того человека который там записан, мне говорят что нужно хотя бы тех, чей пол можно определить, а эта программа у меня есть, и того что нужно она не делает...
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286475
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shadyмне говорят что нужно хотя бы тех, чей пол можно определить, а эта программа у меня есть, и того что нужно она не делает...
А как они решают, чей можно, а чей нет? Фамилия Овчин - это по их мнению однозначно мужская? А я учился в школе с человеком по фамилии Овчин, у которого сестра тоже была Овчин. Программа таких вещей знать не может.
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286485
AndreyMp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторя говорю что не имею представления каким
образом работать с текстом который находится в ячейке, какие функции имеются в ВБ для работы с текстом?
Как же тебе помочь. Это основы VB. Если это заказ, то называй цену. Если хочешь написать сам, то почитай учебники по VB. Могу лишь парочку на мыло кинуть.
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286506
Один1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если это рассылка каких-либо писем или извещенией, то печатайте Уважаемый (ая) Иванов И.И.

Потому что если вы неправильно просклоняете фамилию (а это неизбежно, по крайней мере для какой-то части записей) - это будет хуже, чем "безликое" обращение.
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286546
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreyMp авторя говорю что не имею представления каким
образом работать с текстом который находится в ячейке, какие функции имеются в ВБ для работы с текстом?
Как же тебе помочь. Это основы VB. Если это заказ, то называй цену. Если хочешь написать сам, то почитай учебники по VB. Могу лишь парочку на мыло кинуть.
нет, это не заказ, это работа, ссылки давайте, буду благодарен
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286907
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какие ссылки! Если речь только о функциях для работы со строками в VB, то всё на два порядка проще, чем кажется.

instr
mid (в т.ч. для замены подстроки в строке)
left
right
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286929
shady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
огромное всем спасибо за советы, сейчас буду искать литературу по совету Владимир Саныча функции для работы со строками в VB, но у кого есть советы, пожалуйста пишите, я пока все-же начинающий, поэтому буду благодарен всем ответившим
...
Рейтинг: 0 / 0
изменение окончания у фамилии
    #33286982
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shadyсейчас буду искать литературу по совету Владимир Саныча функции для работы со строками в VB
Я не советовал искать литературу!

подходящий к случаю анекдотАнгличанин спрашивает у слуги:
- Где моя шляпа?
- У Вас на голове, сэр.
- ОК, теперь я ее сам найду.
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 1 из 3
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / изменение окончания у фамилии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]