С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855

Преобразование первой буквы слова строки в прописную

24.05.2021, 17:38. Показов 2325. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Для исправления ошибок при вводе имен в форму использую функцию StrConv (Mе.Имя, vbProperCase).

Но в последнее время появились модные имена Анна-Мария и тому подобное. Так вот функция дает результат Анна-мария.

Может кто-то знает какое-то простое решение этого вопроса, чтоб не думать над перебором всех букв имени и т.п.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.05.2021, 17:38
Ответы с готовыми решениями:

замена первой буквы слова на прописную
Дана символьная строка,содержащая русские слова,записанные строчными буквами, разделенные пробелами. Заменить первые буквы слов на...

Преобразование строчной буквы в прописную
Помогите разобраться. Дано слово. Его первую букву надо преобразовать в прописную (большую). Код следующего вида: y:=copy(slovo,1,1); ...

Замена первой буквы слов, начинающихся с гласной, на прописную
Написать программу, которая считывает английский текст из файла и выводит его на экран, заменив каждую первую букву слов, начинающихся с...

24
Эксперт MS Access
 Аватар для Eugene-LS
12054 / 5836 / 1492
Регистрация: 05.10.2016
Сообщений: 16,421
24.05.2021, 18:06
Лучший ответ Сообщение было отмечено tkrainyk как решение

Решение

Цитата Сообщение от tkrainyk Посмотреть сообщение
Может кто-то знает какое-то простое решение этого вопроса, чтоб не думать над перебором всех букв имени и т.п.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
Public Function NormalString(val As Variant) As Variant
'Нормализация строки (ВАСЯ ПЕТРОВ или вася петров = Вася Петров)
'Для исправления ввода Имён, Фамилий (в т.ч. и двойных: морозов-пупкин = Морозов-Пупкин)
'--------------------------------------------------------------------------
On Error GoTo NormalString_Err
Dim v As Variant
    If InStr(1, val, "-") > 0 Then
        v = Replace(val, "-", " - ")
        v = StrConv(v, 3)
        NormalString = Replace(v, " - ", "-")
    Else
        NormalString = StrConv(val, 3) '3 = vbProperCase
    End If
 
NormalString_End:
    On Error Resume Next
    Exit Function
 
NormalString_Err:
    NormalString = val 'Null
    'MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure NormalString, line " & Erl & ".", vbCritical
    Err.Clear
    Resume NormalString_End
End Function
1
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855
24.05.2021, 18:15  [ТС]
Спасибо, Eugene-LS. Вот что значит настоящий друг. А я б думал над этим впросом неделю, а может месяц ...

Добавлено через 6 минут
Eugene-LS, так вопрос только ради интереса. А почему
Visual Basic
1
Dim v As Variant
переменная как Variant ?
0
 Аватар для Аватар
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
24.05.2021, 18:23
можно и в запросе сразу попробовать в таком духе:
SQL
1
2
3
4
IIF(InStr(1,.Имя,"-")>0,
  StrConv(LEFT(.Имя,InStr(1,.Имя,"-")-1),vbProperCase)+"-"+
  StrConv(RIGHT(.Имя,Len(.Имя)-InStr(1,.Имя,"-")),vbProperCase),
  StrConv(.Имя,vbProperCase))
громоздко правда и некрасиво) С реплейсом будет получше
1
Эксперт MS Access
 Аватар для Eugene-LS
12054 / 5836 / 1492
Регистрация: 05.10.2016
Сообщений: 16,421
24.05.2021, 18:23
Цитата Сообщение от tkrainyk Посмотреть сообщение
А я б думал над этим впросом неделю, а может месяц ...
Можно было и по форуму поискать ... уже было: Маска для поля типа Фамилия И.О.


Цитата Сообщение от tkrainyk Посмотреть сообщение
так вопрос только ради интереса. А почему
Потому что поле может быть и пустым (на момент обработки значения) ...
...
код мой и старый (от 17.11.2018) - если оптимизируете - спасибо скажу только.
1
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855
24.05.2021, 18:28  [ТС]
Цитата Сообщение от Аватар Посмотреть сообщение
можно и в запросе сразу попробовать в таком духе:
Тоже решение. Но в Eugene-LS как-то четче.

Добавлено через 1 минуту
Цитата Сообщение от Eugene-LS Посмотреть сообщение
Можно было и по форуму поискать
Я искал, только по слову преобразование ... и не нашел.

Цитата Сообщение от Eugene-LS Посмотреть сообщение
Потому что поле может быть и пустым
Понял.

Добавлено через 1 минуту
Цитата Сообщение от Eugene-LS Посмотреть сообщение
если оптимизируете - спасибо скажу только
А зачем его оптимизировать, если он работает. Это как изобретать велосипед.
1
Эксперт MS Access
 Аватар для Eugene-LS
12054 / 5836 / 1492
Регистрация: 05.10.2016
Сообщений: 16,421
24.05.2021, 18:37
Цитата Сообщение от tkrainyk Посмотреть сообщение
А зачем его оптимизировать, если он работает.
И я!- и я! - того же мне-ни-и-иЯ!

Спасибо за добрые слова.
Успехов Тарас!
1
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855
24.05.2021, 19:19  [ТС]
Ну если уже сильно хотите усовершествований, то я себе добавил:

Visual Basic
1
val = Trim(val)
На всякий случай.
1
Эксперт MS Access
 Аватар для Eugene-LS
12054 / 5836 / 1492
Регистрация: 05.10.2016
Сообщений: 16,421
24.05.2021, 19:35
Цитата Сообщение от tkrainyk Посмотреть сообщение
то я себе добавил:
Зачёт!
...
Там есть простор для оптимизации ...
Надо будет выделить время и довести "до ума".
1
4089 / 1469 / 401
Регистрация: 07.08.2013
Сообщений: 3,670
25.05.2021, 04:18
Цитата Сообщение от tkrainyk Посмотреть сообщение
val = Trim(val)
не есть хорошо в именах переменных использовать зарезервированные слова
(val - это имя функции в vba)
2
Эксперт MS Access
 Аватар для Eugene-LS
12054 / 5836 / 1492
Регистрация: 05.10.2016
Сообщений: 16,421
25.05.2021, 04:31
Цитата Сообщение от snipe Посмотреть сообщение
не есть хорошо в именах переменных использовать зарезервированные слова
Вы совершенно правы!
0
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855
25.05.2021, 08:58  [ТС]
Цитата Сообщение от snipe Посмотреть сообщение
не есть хорошо в именах переменных использовать зарезервированные слова
(val - это имя функции в vba)
Лично тестировал. Гарантирую, функция Eugene-LS работает.
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
25.05.2021, 11:11
Цитата Сообщение от tkrainyk Посмотреть сообщение
Гарантирую, функция Eugene-LS работает.
Не всегда правильно.
Visual Basic
1
2
3
4
5
? NormalString("скаРЛетТ о'хара")
Скарлетт О'хара
 
? NormalString("джером к.джером")
Джером К.джером
Цитата Сообщение от Eugene-LS Посмотреть сообщение
код мой
Это хорошо, что Вы воспользовались моей идейкой Replace(..., "-", " - ") / Replace(...., " - ", "-"), показанной в Маска для поля типа Фамилия И.О.,
и так здорово популяризируете её.

Но время не стоит на месте.
Вот другой мой вариант, более "универсальный":
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Function Func_FirstLetterUpperCase(S As Variant) As String
 Dim RE As Object, _
     M As Object
 Dim i As Integer, _
     j As Integer
 S = " " & StrConv(S, vbLowerCase)
 Set RE = CreateObject("VBScript.RegExp")
 RE.Global = True
 RE.Pattern = "[^a-z|а-я][a-z|а-я]"
 Set M = RE.Execute(S)
 If M.Count > 0 Then
  For i = 0 To M.Count - 1
   j = InStr(S, M(i))
   Mid(S, j, 2) = StrConv(M(i), vbUpperCase)
  Next
 End If
 Func_FirstLetterUpperCase = Trim(S)
End Function
Примеры использования:
Visual Basic
1
2
3
4
5
6
7
8
? Func_FirstLetterUpperCase("скаРЛетТ о'хара")
Скарлетт О'Хара
 
? Func_FirstLetterUpperCase("джером к.джером")
Джером К.Джером
 
? Func_FirstLetterUpperCase("dddd    gggg   зззз  ж ц/h w")
Dddd    Gggg   Зззз  Ж Ц/H W
1
775 / 256 / 43
Регистрация: 09.12.2016
Сообщений: 855
25.05.2021, 11:22  [ТС]
Да, вы правы. Но у меня обычные жители района. Мне и так хватит.

У нас таких фамилий нет: Скарлетт О'Хара

Добавлено через 4 минуты
Интересно, такие фокусы только у нас, или где-то еще пошло тлетворное влияние запада. Вот имена детей 2021 года рождения: Карина-Екатерина, Мария-Злата, Юрий-Владимир ...

Их немного, но работать мешают.
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
25.05.2021, 11:26
Цитата Сообщение от tkrainyk Посмотреть сообщение
У нас таких фамилий нет
Мне без разницы.
Есть, нету...

Не по теме:

Да и откуда Вам знать все фамилии района?



Я про функцию - выполняет заявленное или не выполняет.

Тем более, что в заголовке темы задача поставлена в общем виде.
Цитата Сообщение от tkrainyk Посмотреть сообщение
Преобразование первой буквы слова строки в прописную
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
25.05.2021, 11:31
Цитата Сообщение от tkrainyk Посмотреть сообщение
тлетворное влияние запада
Родители не смогли договориться и оставили оба имени.)))
1
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,380
25.05.2021, 11:31
Цитата Сообщение от tkrainyk Посмотреть сообщение
О'Хара
Ух добавил бы я буквочек
0
Эксперт MS Access
 Аватар для Eugene-LS
12054 / 5836 / 1492
Регистрация: 05.10.2016
Сообщений: 16,421
25.05.2021, 13:44
Цитата Сообщение от Capi Посмотреть сообщение
Не всегда правильно.
Ну чего по рёбрам то, и кирзовым сапогом ?!
Лежу в луже собственной крови и наслаждаюсь моментом ...
0
Модератор
Эксперт MS Access
6231 / 2909 / 707
Регистрация: 12.06.2016
Сообщений: 7,839
25.05.2021, 14:07
По делу есть, что сказать?
0
Эксперт MS Access
 Аватар для Eugene-LS
12054 / 5836 / 1492
Регистрация: 05.10.2016
Сообщений: 16,421
25.05.2021, 14:32
Цитата Сообщение от Capi Посмотреть сообщение
По делу есть, что сказать?
Ye-e-e-s-sss!
Значения аргумента типа "Д'Артаньян" изначально не рассматривались т.к. экстремально редки.

Добавлено через 16 минут
Цитата Сообщение от Capi Посмотреть сообщение
А вот это мой:
Обработать "апострров", в буржуйских именах, можно гораздо проще и быстрее.
Возможно при "доведении до ума" я включу это - надо подумать о целесообразности.
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2021, 14:32
Помогаю со студенческими работами здесь

Строки. Напечатать все слова, которые отличны от последнего слова, удалив из слова все последующие вхождения первой буквы
Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 строчных русских букв; между соседними словами -...

Найти слова четной длины, у которых все буквы из первой половины слова встречаются во второй половине слова
Пожалуйста, помогите написать программу. Вот условие: Дана последовательность символов, состоящая из слов четной длины. Вывести на...

Удалить с первой части первой строки все слова, которые совпадают с последним словом второй строки
Здравствуйте. Вводим две отдельные строки, в которых должно быть не меньше 4-х слов. Необходимо удалить с первой части первой строки...

Как вывести последние 3 буквы из первой строки и первые 3 буквы из второй строки 10 раз
Помогите пожалуйста, составить программу с действиями 1. Вводим любое слово в первую строку 2. Вводим любое слово во вторую строку 3....

Написать программу, которая в каждом слове перемешивает буквы местами за исключением первой и последней буквы слова
Написать программу, которая в каждом слове перемешивает буквы местами за исключением первой и последней буквы слова.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru