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

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

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

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

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

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

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

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

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

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

например какой должен быть алгоритм для таких записей? я что-то даже не могу представить...
точнее могу, но думаю не правильно...
во первых единственная закономерность в этих записях - это фамилия, которая всегда первая по порядку, от этого я думаю стоит отталкиваться.
потом каким-то образом нужно узнать конец слова, и проверить его окончание.
как это сделать, понятия не имею...
...
Рейтинг: 0 / 0
23.09.2005, 08:24:30
    #33285007
изменение окончания у фамилии
Если формат: Иванов А.А. - ищи позицию первого пробела и от него отнимай то количество символов, чтобы проанализировать оканчание фамилии. Если просто: Иванова - анализируй символы справа.
...
Рейтинг: 0 / 0
23.09.2005, 08:52:00
    #33285056
shady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение окончания у фамилии
а помочь с кодом можете? как искать позицию пробела я не представляю...
...
Рейтинг: 0 / 0
23.09.2005, 09:02:35
    #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
23.09.2005, 09:28:32
    #33285135
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение окончания у фамилии
В форуме по SQL Server есть много работающих решений этой задачи.
...
Рейтинг: 0 / 0
23.09.2005, 09:38:45
    #33285155
AndreyMp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
изменение окончания у фамилии
авторVisual Basic содержит две функции, позволяющие осуществлять поиск символьной строки в другой: inStr и inStrRev. Эти функции отличаются тем, что inStr осуществляет поиск с начала строки и до ее конца, а InStrRev проводит поиск в обратном направлении, то есть от конца строки к началу.

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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