С Новым годом! Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566

Смена строчных букв на прописные

20.12.2019, 13:33. Показов 4090. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Интересует алгоритм данного процесса. Я нашёл 3 примера (автор 2-х Dragokas), но понять алгоритм работы не смог. Просьба помочь. Итак алгоритм №1:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
SetLocal EnableExtensions
 
set data=ivan.petrov
 
for /f "delims=. tokens=1,2" %%a in ("%data%") do set name=%%a& set surname=%%b
call :ProperCase %name% name
call :ProperCase %surname% surname
echo Hello, %name% %surname%
pause
goto :eof
 
:ProperCase
  set "str=%~1"
  set "char=%str:~,1%"& set "str=%str:~1%"
  for /f "delims=" %%a in ('"find "" "%char%" 2>&1"') do set x=%%a& call set char=%%x:~-1%%
  set "%~2=%char%%str%"
exit /b
Суть алгоритма вывести текст: Hello, Имя Фамилия, то есть имя и фамилия должны быть с большой буквы.
До :ProperCase всё понятно, а вот сам блок :ProperCase непонятен. Просьба разъяснить.

Алгоритм №2:
Windows Batch file
1
2
3
if not defined %~1 EXIT /b 
for %%a in ("A=a" "B=b" "C=c" "D=d" "E=e" "F=f" "G=g" "H=h" "I=i" "J=j" "K=k" "L=l" "M=m" "N=n" "O=o" "P=p" "Q=q" "R=r" "S=s" "T=t" "U=u" "V=v" "W=w" "X=x" "Y=y" "Z=z" "А=а" "Б=б" "В=в" "Г=г" "Д=д" "Е=е" "Ж=ж" "З=з" "И=и" "К=к" "Л=л" "М=м" "Н=н" "О=о" "П=п" "Р=р" "С=с" "Т=т" "У=у" "Ф=ф" "Х=х" "Ц=ц" "Ч=ч" "Ш=ш" "Щ=щ" "Ь=ь" "Ы=ы" "Ъ=ъ" "Э=э" "Ю=ю" "Я=я") do ( call set %~1=%%%~1:%%~a%% ) 
EXIT /b
Здесь непонятно всё, что идёт после do

Алгоритм №3:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
set "file=example.txt"
 
>nul chcp 1251
<"%file%">$ (
 for /f "delims=" %%i in ('find/n /v ""') do @(
  set x=%%i& call set "x=%%x:?=$#$%%"& call set "x=%%x:"=$@$%%"
  for /f "tokens=3*" %%j in ('2^>^&1 cmd/v/c find "" "!x!"') do @(
   set x=%%k
   cmd/v/c echo[!x:*]^^=!
  )
 )
)
>nul chcp 866
<$>"%file%" (
 for /f "delims=" %%i in ('find/n /v ""') do @(
  >nul chcp 1251
  set x=%%i& call set "x=%%x:$#$=?%%"& call set "x=%%x:$@$="%%"
  cmd/v/c echo[!x:*]^^=!
 )
)
del $
 
exit/b 0
Просто тёмный лес...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.12.2019, 13:33
Ответы с готовыми решениями:

Замена строчных символов на прописные в начале каждой строке файла
Нужно в файле 1.txt заменить первую строчную букву в слове, в строке на на прописную (заглавную). И так во всех строках файла 1.txt. Не...

Замена в исходной строке всех строчных русских и латинских букв на прописные, а прописные – на строчные
При создании новой строки используйте класс StringBuffer. Напишите метод, который принимает в качестве параметра строку и...

Замена строчных букв на прописные
Доброго времени суток! В универе задали задание написать в Masm32 прогу, которая меняет малые буквы на большие. Практики особой нет,...

27
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
21.12.2019, 05:04
Цитата Сообщение от Karen87 Посмотреть сообщение
Просто тёмный лес
ну я полагаю что в темный лес надо заходить с уровнем повыше, а пока довольствоваться тем что предоставят для конкретной задачи, четко расписанной в новой созданной теме и потихоньку постигать, если есть желание писать коды уже самостоятельно.
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
21.12.2019, 14:37  [ТС]
Хорошо, а если у меня есть несколько задач по данной тематике, которые возможно нельзя решить в рамках одной темы? Создавать к каждой отдельную? Мне, в принципе, непонятен механизм смены строчной буквы на прописную
0
6969 / 2863 / 1100
Регистрация: 06.06.2017
Сообщений: 9,713
21.12.2019, 15:09
Цитата Сообщение от Karen87 Посмотреть сообщение
Мне, в принципе, непонятен механизм смены строчной буквы на прописную
Тогда используйте более понятные механизмы:
Windows Batch file
1
2
3
@set n=sidorov ivan petrovitch
@for /f "delims=" %%i in ('powershell -c "[regex]::replace('%n%','\b\w',{$args[0].value.toUpper()})"') do @echo %%i
@pause>nul
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
21.12.2019, 15:21  [ТС]
А исключить powershell и использовать исключительно средства batch?
0
6969 / 2863 / 1100
Регистрация: 06.06.2017
Сообщений: 9,713
21.12.2019, 16:13
Тогда речь может идти только про 2 алгоритм. Нравится? Мне нет.
Могу предложить такой:
Windows Batch file
1
2
3
4
5
6
@echo off&setlocal enabledelayedexpansion
set n=sidorov ivan petrovitch
 
for %%n in (%n%) do set "a=%%n"&for /f tokens^=4 %%i in ('2^>^&1 find "" "!a:~,1!.>"') do @set fn=!fn! %%~ni!a:~1!
echo !fn:~1!
pause>nul
1
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
21.12.2019, 16:44  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
Могу предложить такой:
Отлично, хотелось бы услышать Ваши комментарии по следующему моменту:
В 4 строчке каждый токен из переменной n присваивается переменной a, далее мне не совсем понятно что происходит здесь '2^>^&1 find "" "!a:~,1!.>"'. Я лишь могу предположить, что вывод ошибок происходит в командную строку, в модифицированной переменной a происходит поиск непонятно чего.
Модифицированной переменной a я вижу эту конструкцию "!a:~,1!.>". Хотелось бы понять, что именно с ней происходит в этой конструкции. Если бы не запятая, то было бы понятно, что избавляемся от кавычек либо при наличии второй цифры идёт выделение подстроки. .> вообще не имею представления зачем это нужно
0
6969 / 2863 / 1100
Регистрация: 06.06.2017
Сообщений: 9,713
21.12.2019, 17:27
Происходит не поиск, а намеренный вызов ошибки, приводящий к выводу имени отсутствующего файла в верхнем регистре.
!a:~,1! — это первый символ разбираемой подстроки. Далее идёт точка с расширением. > — это запрещённый символ в именах (равно как : * ? < ", но подходят тут только : и >), благодаря котому мы точно получим ошибку.
2>&1 find "" "a.>" даст Не найден файл: A.>. С tokens^=4 мы получем имя A.>, а %%~ni далее вытащит только A.
1
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
21.12.2019, 17:39  [ТС]
Так, идеология более или менее ясна, но сколько изощрений и фантазии, чтобы банально сменить букву... Пару уточняющих моментов:
1) !a:~,1! - использование первого символа без пропуска с начала подстроки, правильно? Если бы, допустим, было !a:~1,1!, то использовался бы второй символ?
2) find "" - происходит поиск в выводе командной строки?
3) set fn=!fn! %%~ni!a:~1! по этой конструкции я даже специально создавал тему, но ответа не получил.
4) В чём разница между !a:~,1! и !a:~1!?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
21.12.2019, 17:54
Цитата Сообщение от Karen87 Посмотреть сообщение
но сколько изощрений и фантазии, чтобы банально сменить букву
Есс-но. И все потому, что нет элементарных функций upper() и lower(), которые есть везде.
Lua
1
2
3
4
5
6
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> print(string.upper("hello"))
HELLO
> print(string.lower("HELLO"))
hello
>
Кстати, поскольку в batch вообще нет функций для работы со строками (кроме замены) - пачками изощрений и фантазий нужно запасаться на годы вперед.
1
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
21.12.2019, 18:03  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
upper() и lower()
А если изменить одну или несколько букв в слове?
0
6969 / 2863 / 1100
Регистрация: 06.06.2017
Сообщений: 9,713
21.12.2019, 18:04
Цитата Сообщение от Karen87 Посмотреть сообщение
но сколько изощрений и фантазии, чтобы банально сменить букву...
Вот поэтому для таких вещей и используются нормальные скриптовые языки, а не сценарный.
1) Без какого пропуска? Читаем справку set /?, проверяем в комстроке. Это же так просто.
2) Не понял вопроса. "" дают игнор искомого текста.
3) Происходит конкатенация пробелом подстрок из первого цикла. Про %%~ni я уже выше писал. Это получаемый первый символ в верхнем регистре. !a:~1! — остальная часть подстроки, начиная со второго символа.
4) Уже ответил.
1
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
21.12.2019, 18:23  [ТС]
Цитата Сообщение от FlasherX Посмотреть сообщение
Без какого пропуска
В справке есть пример %PATH:~10,5%, где расписано, что используется 5 символов с 11-го, то есть 10 символов с начала переменной пропускаются. В Вашем примере !a:~,1! не указано количество символов, которые нужно пропустить с начала. В связи с этим я и задал вопрос.
Цитата Сообщение от FlasherX Посмотреть сообщение
"" дают игнор искомого текста
Что значит дают игнор искомого текста?
0
6969 / 2863 / 1100
Регистрация: 06.06.2017
Сообщений: 9,713
21.12.2019, 18:35
Цитата Сообщение от Karen87 Посмотреть сообщение
В Вашем примере !a:~,1! не указано количество символов, которые нужно пропустить с начала.
Отсутствие равноценно нулю.
Цитата Сообщение от Karen87 Посмотреть сообщение
Что значит дают игнор искомого текста?
Т. е. по сути ищем строку нулевой длины, тем самым игнорируя целевую функцию утилиты.
1
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
21.12.2019, 18:42  [ТС]
Я понял Вас, спасибо огромное за консультацию!
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
21.12.2019, 18:45
Цитата Сообщение от Karen87 Посмотреть сообщение
А если изменить одну или несколько букв в слове?
Lua
1
2
3
4
5
6
7
8
9
10
11
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> str = "hello world"
> str = str:gsub("o", "O")
> print(str)
hellO wOrld
>
> str = "hello world"
> str = str:gsub("[a-e]","O") -- любые регескспы в качестве шаблонов
> print(str)
hOllo worlO
>
1
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
21.12.2019, 18:54  [ТС]
Цитата Сообщение от Garry Galler Посмотреть сообщение
А если изменить одну или несколько букв в слове?
Так просто... Спасибо Вам!
0
6969 / 2863 / 1100
Регистрация: 06.06.2017
Сообщений: 9,713
21.12.2019, 19:36
Парочка других "просто":
Windows Batch file
1
echo sidorov ivan petrovitch|ssed -R "s/\b\S/\U&/g"
Code
1
2
; UpperCaseFirstLetters.ahk
MsgBox % RegExReplace("sidorov ivan petrovitch", "\b(\p{Ll})", "$U1")
0
3449 / 1110 / 494
Регистрация: 29.05.2016
Сообщений: 4,566
21.12.2019, 19:47  [ТС]
1) Это утилита такая ssed?
2) Чем реализовано? Batch?
0
6969 / 2863 / 1100
Регистрация: 06.06.2017
Сообщений: 9,713
21.12.2019, 19:53
1) Да.
2) См. расширение файла в комменте.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.12.2019, 19:53
Помогаю со студенческими работами здесь

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

Переход со строчных букв на прописные
Как в Excel сделать переход с строчных букв на прописные? В Word это делается легко с помощью комбинации клавиш &lt;Shift+F3&gt;. Есть ли...

Преобразование строчных букв в прописные
Написать программу, которая в веденной с клавиатуры строке преобразует строчные буквы русского алфавита в про- писные. Upcase не...

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

Перевод строки строчных букв в прописные
Составил программу по заданию: Составьте программу перевода строки строчных русских букв в прописные в Lazarus. При отладке, ввожу русские...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru