Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как преобразовать Фамилию Имя Отчество
 
 автор: k@s   (10.11.2009 в 10:43)   личное сообщение
 
 

как можно преобразовать Фамилию Имя Отчество в Фамилию И.О

  Ответить  
 
 автор: snipe   (10.11.2009 в 10:48)   личное сообщение
 
 

а Фамилия Имя Отчество в разных полях или в одном?

  Ответить  
 
 автор: k@s   (10.11.2009 в 10:53)   личное сообщение
 
 

в одном

  Ответить  
 
 автор: Силblч   (10.11.2009 в 11:13)   личное сообщение
 
 

при условии, что фамилии имена отчества разделяются пробелами и сохранена последовательность ввода
arrFIO=split([Фамилия Имя Отчество],chr(32))
ну а дальше обращаетесь к ним по одному :)
"сократить" имя, например arrFIO[1]=left(arrFIO[1],1) & "."
... ка кто так...

  Ответить  
 
 автор: Мюллер   (10.11.2009 в 11:15)   личное сообщение
 
 

Split -ом по пробелам разделить на массив. А затем выбирать первую букву в имени и отчестве

  Ответить  
 
 автор: kot_k_k   (10.11.2009 в 13:21)   личное сообщение
 
 

еще желательно предусмотреть сокращения типа Вл и Влад (или к полному ФИО) а так же отработку типа Рагимов Ибрагим-Оглы, когда только есть Фамилия и Имя.

  Ответить  
 
 автор: Мюллер   (10.11.2009 в 13:26)   личное сообщение
 
 


Рагимов Ибрагим-Оглы, когда только есть Фамилия и Имя.


Приставка оглы означает отчество.

  Ответить  
 
 автор: час   (10.11.2009 в 16:05)   личное сообщение
 
 

тада надо
DIM FAM_I_O as string
IF instr (1,FIO,"-",3)<>0 then
' тута будут оглы
FAM_I_O = left(FIO,instr (1,FIO," ",3)) & mid(instr (1,FIO," ",3))
else
' тута без оглов
FAM_I_O = left(FIO,instr (1,FIO," ",3)) & mid(instr (1,FIO," ",3)+1,1) & mid(instr (instr (1,FIO," ",3)+1,FIO," ",3)+1,1)
end if

  Ответить  
 
 автор: kot_k_k   (10.11.2009 в 16:12)   личное сообщение
 
 


Приставка оглы означает отчество.


я про то, что пишется через дефис и код заорет на ошибку про отсутствие 2-го пробела.

  Ответить  
 
 автор: snipe   (10.11.2009 в 16:19)   личное сообщение
 
 

Приставка оглы означает мужчина кызы - женщина

  Ответить  
 
 автор: k@s   (10.11.2009 в 16:38)   личное сообщение
 
 

буль буль оглы не катит .


Private Sub ФамилияР_LostFocus()
Dim fi As String
fi = Right$([ФамилияР], Len([ФамилияР]) - InStr(1, [ФамилияР], " ") - 0)

LastName = Left$([ФамилияР], InStr(1, [ФамилияР], " ") - 1) ' фамилия
FirstName = Left$([fi], InStr(1, [fi], " ") - 1) 'Имя
Otch = Right$(fi, Len(fi) - InStr(1, fi, " ") - 0) 'Отчество
End Sub
А что про это скажите тоже глючит

  Ответить  
 
 автор: час   (10.11.2009 в 16:44)   личное сообщение
 
 

А что про это скажете?


DIM FAM_I_O as string
IF instr (1,FIO,"-",3)<>0 then
' тута будут оглы
FAM_I_O = left(FIO,instr (1,FIO," ",3)) & mid(instr (1,FIO," ",3))
else
' тута без оглов
FAM_I_O = left(FIO,instr (1,FIO," ",3)) & mid(instr (1,FIO," ",3)+1,1) & mid(instr (instr (1,FIO," ",3)+1,FIO," ",3)+1,1)
end if

  Ответить  
 
 автор: k@s   (10.11.2009 в 16:50)   личное сообщение
 
 

Час! на примерчике покажи что то не получается

  Ответить  
 
 автор: час   (10.11.2009 в 17:12)   личное сообщение
 
 

Код прям скопируйте...
Только вместо FIO
Me!ПОЛЕ_ФАМИЛИИИИИ

  Ответить  
 
 автор: час   (10.11.2009 в 16:45)   личное сообщение
 
 

FirstName = Left$([fi], InStr(1, [fi], " ") - 1) 'Имя
это не найдёт имя...
Это слева до пробела

  Ответить  
 
 автор: час   (10.11.2009 в 17:19)   личное сообщение
11 Кб.
 
 

Вот примерчик

Private Sub Кнопка0_Click()
Dim FAM_I_O As String
If InStr(1, Me!Поле1, "-", 3) <> 0 Then
' тута будут оглы
FAM_I_O = Left(Me!Поле1, InStr(1, Me!Поле1, " ", 3)) & Mid(Me!Поле1, InStr(1, Me!Поле1, " " + 1, 3))
Else
' тута без оглов
FAM_I_O = Left(Me!Поле1, InStr(1, Me!Поле1, " ", 3)) & Mid(Me!Поле1, InStr(1, Me!Поле1, " ", 3) + 1, 1) & "." & Mid(Me!Поле1, InStr(InStr(1, Me!Поле1, " ", 3) + 1, Me!Поле1, " ", 3) + 1, 1) & "."
End If
Me!Поле3 = FAM_I_O

End Sub

  Ответить  
 
 автор: kot_k_k   (10.11.2009 в 17:24)   личное сообщение
 
 

БАГАУТДІНОВ ГАБДРАУФ ГАБДНУР УЛИ
вот из жизни , моя база - че делать с 3-м пробелом?

  Ответить  
 
 автор: k@s   (10.11.2009 в 18:24)   личное сообщение
 
 

Все работает. Ну я думаю БАГАУТДІНОВ ГАБДРАУФ ГАБДНУР УЛИ через восток не поедит.

  Ответить  
 
 автор: час   (10.11.2009 в 19:29)   личное сообщение
11 Кб.
 
 

Просто добавить ещё немного кода...
По аналогии можно и далее

  Ответить  
 
 автор: час   (10.11.2009 в 19:58)   личное сообщение
10 Кб.
 
 

А ВАЩЕ ТО извиняюся - был не прав
Вот так будет лучшеее

Скока хочешь пробелов столько будет буквов

  Ответить  
 
 автор: Explorer   (10.11.2009 в 20:04)   личное сообщение
 
 

проверку на наличие пробела забыл прикрутить

  Ответить  
 
 автор: час   (10.11.2009 в 20:08)   личное сообщение
 
 


ТОЧНО...........
Ну тада надо и сообщение "Вы чё пишите - второго и третьего пробелов не нахожу"

  Ответить  
 
 автор: Explorer   (10.11.2009 в 20:09)   личное сообщение
 
 

хуже если "первого пробела не нахожу" - третий вообще не по ТЗ - опционально :)

  Ответить  
 
 автор: час   (10.11.2009 в 20:13)   личное сообщение
 
 

Вот так например



Dim FAM_I_O As String
Dim F As Long
If InStr(1, Me!Поле1, " ", 3) = 0 Then
Call MsgBox("В данной записи отсутствуют разделители!!! (пробелы)", vbCritical)
Exit Sub
End If
FAM_I_O = Left(Me!Поле1, InStr(1, Me!Поле1, " ", 3))

For F = Len(FAM_I_O) To Len(Me!Поле1)
If Mid(Me!Поле1, F, 1) = " " Then
FAM_I_O = FAM_I_O & " " & Mid(Me!Поле1, F + 1, 1) & "."
End If
Next F
Me!Поле3 = FAM_I_O

  Ответить  
 
 автор: час   (10.11.2009 в 20:17)   личное сообщение
 
 

А мона вот так


Dim FAM_I_O As String
Dim F As Long
If InStr(1, Me!Поле1, " ", 3) = 0 Then
Call MsgBox("В данной записи отсутствуют разделители!!! (пробелы)", vbCritical)
Me!Поле3 = Me!Поле1
Exit Sub
End If
FAM_I_O = Left(Me!Поле1, InStr(1, Me!Поле1, " ", 3))

For F = Len(FAM_I_O) To Len(Me!Поле1)
If Mid(Me!Поле1, F, 1) = " " Then
FAM_I_O = FAM_I_O & " " & Mid(Me!Поле1, F + 1, 1) & "."
End If
Next F
Me!Поле3 = FAM_I_O

  Ответить  
 
 автор: час   (10.11.2009 в 20:19)   личное сообщение
 
 

А где те кто задавал вопросы... ..........
Они для себя уже всё уяснили????

  Ответить  
 
 автор: Explorer   (10.11.2009 в 20:21)   личное сообщение
 
 

ЗЫ
если приходится обрабатывать большое количество данных - лучше отдавать проверку в аутсорс специализированным компаниям

или сначала обработать данные "скопом" в Excel и потом закачать обратно в нормализованную таблицу Access

  Ответить  
 
 автор: Explorer   (10.11.2009 в 20:19)   личное сообщение
 
 

не нужно проверять количество пробелов =0
нужно проверять количество пробелов >0

это сократит код,

дополнительно можно применить Else (MsgBox "Имя не указано или указано в одно слово - проверьте корректность ввода")

  Ответить  
 
 автор: час   (10.11.2009 в 20:22)   личное сообщение
 
 

Вы считаете??????77


Dim FAM_I_O As String
Dim F As Long

If InStr(1, Me!Поле1, " ", 3) > 0 Then
FAM_I_O = Left(Me!Поле1, InStr(1, Me!Поле1, " ", 3))
For F = Len(FAM_I_O) To Len(Me!Поле1)
If Mid(Me!Поле1, F, 1) = " " Then
FAM_I_O = FAM_I_O & " " & Mid(Me!Поле1, F + 1, 1) & "."
End If
Next F
Me!Поле3 = FAM_I_O
Else
Call MsgBox("В данной записи отсутствуют разделители!!! (пробелы)", vbCritical)
Me!Поле3 = Me!Поле1
Exit Sub
End If

  Ответить  
 
 автор: Explorer   (10.11.2009 в 22:08)   личное сообщение
 
 


Вы считаете??????77



я бы воспользовался рекурсией

add

передавая очередную позицию первого пробела в остатке стринга, пока не кончится текст

  Ответить  
 
 автор: protc   (23.02.2011 в 17:29)   личное сообщение
 
 

А как поступить если требуется из Фамилия Имя Отчество >>>>>> И.О. Фамилия

  Ответить  
 
 автор: kot_k_k   (24.02.2011 в 09:10)   личное сообщение
 
 

функции Mid (), Instr()

  Ответить  
 
 автор: Остап Бендер   (10.11.2009 в 22:50)   личное сообщение
 
 

А меня как оФИОчить:
Остап-Сулейман-Берта-Мария-Бендер-Бей?

  Ответить  
 
 автор: час   (11.11.2009 в 08:43)   личное сообщение
 
 



Оч просто делаем функцию - куда в качестве параметров будет передаваться (разделитель)


Public function FAMIO_F_I_O (DELILKA as string)

Dim FAM_I_O As String
Dim F As Long

If InStr(1, Me!Поле1, DELILKA, 3) > 0 Then
FAM_I_O = Left(Me!Поле1, InStr(1, Me!Поле1, DELILKA, 3))
For F = Len(FAM_I_O) To Len(Me!Поле1)
If Mid(Me!Поле1, F, 1) = DELILKA Then
FAM_I_O = FAM_I_O & " " & Mid(Me!Поле1, F + 1, 1) & "."
End If
Next F
Me!Поле3 = FAM_I_O
Else
Call MsgBox("В данной записи отсутствуют разделители!!! --> " & DELILKA , vbCritical)
Me!Поле3 = Me!Поле1
Exit Sub
End If
end function
А в настройках будем иметь таблицу с перечнем используемых или возможных разделителей и столбцом - использовать.

А на форме будут переключатели " "
А на форме будут переключатели "/ "
А на форме будут переключатели "- "
А на форме будут переключатели "_ "
А на форме будут переключатели ","
А на форме будут переключатели "~"
А на форме будут переключатели "^"
А на форме будут переключатели "="
А на форме будут переключатели "+"
...................................................................



  Ответить  
 
 автор: snipe   (11.11.2009 в 08:54)   личное сообщение
 
 

запишем исходя из национальных традиций
то бишь Осап Сулейманович Бендер в итоге Бендер О.С.
главное не перегнуть палку
паспорт попадался гражданина Российской Федерации
товарисЧ по нацинальности китаец так сотрудники паспортно-визовой службы ни чего умнее не придумали как в графе отчество написать хуевич (да простит меня Osmor)
вот так и живет теперь человек

  Ответить  
 
 автор: kot_k_k   (11.11.2009 в 09:59)   личное сообщение
 
 


то бишь Осап Сулейманович Бендер в итоге Бендер О.С.


Остап-Сулейман-Берта-Мария-Бендер-Бей
вот как он себязвал

  Ответить  
 
 автор: Силblч   (23.02.2011 в 17:54)   личное сообщение
 
 

через паспортный стол

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList