|
|
|
| как можно преобразовать Фамилию Имя Отчество в Фамилию И.О | |
|
| |
|
|
|
| а Фамилия Имя Отчество в разных полях или в одном? | |
|
| |
|
|
|
|
| при условии, что фамилии имена отчества разделяются пробелами и сохранена последовательность ввода
arrFIO=split([Фамилия Имя Отчество],chr(32))
ну а дальше обращаетесь к ним по одному :)
"сократить" имя, например arrFIO[1]=left(arrFIO[1],1) & "."
... ка кто так... | |
|
| |
|
|
|
| Split -ом по пробелам разделить на массив. А затем выбирать первую букву в имени и отчестве | |
|
| |
|
|
|
| еще желательно предусмотреть сокращения типа Вл и Влад (или к полному ФИО) а так же отработку типа Рагимов Ибрагим-Оглы, когда только есть Фамилия и Имя. | |
|
| |
|
|
|
|
Рагимов Ибрагим-Оглы, когда только есть Фамилия и Имя.
|
Приставка оглы означает отчество. | |
|
| |
|
|
|
| тада надо
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 | |
|
| |
|
|
|
|
Приставка оглы означает отчество.
|
я про то, что пишется через дефис и код заорет на ошибку про отсутствие 2-го пробела. | |
|
| |
|
|
|
| Приставка оглы означает мужчина кызы - женщина | |
|
| |
|
|
|
| буль буль оглы не катит .
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
А что про это скажите тоже глючит | |
|
| |
|
|
|
| А что про это скажете?
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
|
| |
|
| |
|
|
|
| Час! на примерчике покажи что то не получается | |
|
| |
|
|
|
| Код прям скопируйте...
Только вместо FIO
Me!ПОЛЕ_ФАМИЛИИИИИ | |
|
| |
|
|
|
| FirstName = Left$([fi], InStr(1, [fi], " ") - 1) 'Имя
это не найдёт имя...
Это слева до пробела | |
|
| |
|
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 | |
|
| |
|
|
|
| БАГАУТДІНОВ ГАБДРАУФ ГАБДНУР УЛИ
вот из жизни , моя база - че делать с 3-м пробелом? | |
|
| |
|
|
|
| Все работает. Ну я думаю БАГАУТДІНОВ ГАБДРАУФ ГАБДНУР УЛИ через восток не поедит. | |
|
| |
|
11 Кб. |
|
| Просто добавить ещё немного кода...
По аналогии можно и далее | |
|
| |
|
10 Кб. |
|
| А ВАЩЕ ТО извиняюся - был не прав
Вот так будет лучшеее
Скока хочешь пробелов столько будет буквов | |
|
| |
|
|
|
| проверку на наличие пробела забыл прикрутить | |
|
| |
|
|
|
|
| хуже если "первого пробела не нахожу" - третий вообще не по ТЗ - опционально :) | |
|
| |
|
|
|
| Вот так например
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
|
| |
|
| |
|
|
|
| А мона вот так
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
|
| |
|
| |
|
|
|
| А где те кто задавал вопросы... ..........
Они для себя уже всё уяснили????
| |
|
| |
|
|
|
| ЗЫ
если приходится обрабатывать большое количество данных - лучше отдавать проверку в аутсорс специализированным компаниям
или сначала обработать данные "скопом" в Excel и потом закачать обратно в нормализованную таблицу Access | |
|
| |
|
|
|
| не нужно проверять количество пробелов =0
нужно проверять количество пробелов >0
это сократит код,
дополнительно можно применить Else (MsgBox "Имя не указано или указано в одно слово - проверьте корректность ввода") | |
|
| |
|
|
|
| Вы считаете??????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
|
| |
|
| |
|
|
|
|
я бы воспользовался рекурсией
add
передавая очередную позицию первого пробела в остатке стринга, пока не кончится текст | |
|
| |
|
|
|
| А как поступить если требуется из Фамилия Имя Отчество >>>>>> И.О. Фамилия | |
|
| |
|
|
|
|
| А меня как оФИОчить:
Остап-Сулейман-Берта-Мария-Бендер-Бей?
| |
|
| |
|
|
|
|
Оч просто делаем функцию - куда в качестве параметров будет передаваться (разделитель)
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
А в настройках будем иметь таблицу с перечнем используемых или возможных разделителей и столбцом - использовать.
А на форме будут переключатели " "
А на форме будут переключатели "/ "
А на форме будут переключатели "- "
А на форме будут переключатели "_ "
А на форме будут переключатели ","
А на форме будут переключатели "~"
А на форме будут переключатели "^"
А на форме будут переключатели "="
А на форме будут переключатели "+"
...................................................................
| |
|
| |
|
|
|
| запишем исходя из национальных традиций
то бишь Осап Сулейманович Бендер в итоге Бендер О.С.
главное не перегнуть палку
паспорт попадался гражданина Российской Федерации
товарисЧ по нацинальности китаец так сотрудники паспортно-визовой службы ни чего умнее не придумали как в графе отчество написать хуевич (да простит меня Osmor)
вот так и живет теперь человек | |
|
| |
|
|
|
|
то бишь Осап Сулейманович Бендер в итоге Бендер О.С.
|
Остап-Сулейман-Берта-Мария-Бендер-Бей
вот как он себязвал | |
|
| |
|
|
|
| через паспортный стол | |
|
| |