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

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

20.12.2019, 13:33. Показов 4111. Ответов 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,718
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,718
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,718
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,718
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,718
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,718
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,718
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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru