|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы? |
|
|
CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
|
Старожил Сообщения: 426 |
Профиль | Отправить PM | Цитировать Ради интереса веду "лог" затрат на свое "корыто".
Формат таков: сумма[TAB]дата[TAB]сабж при этом если поле сабж начинается с маленькой буквы, то это "работы", а с большой - "запчасти". сегодня задумался, сколькож я потратил и быстренько накатал батничек для подсчета общей суммы. Но поскольку в самом логе уже заложено разделение работ и запчастей, захотелось "добавить" разделение общей суммы на составляющие, но как оказалось отличить строчные/прописные буквы весьма проблематично. Во всяком случае сделать это "красиво", не увеличивая существенно время выполнения батника так и не удалось. Никто не сталкивался с подобными задачами? Может поделитесь опытом? |
|
Отправлено: 17:37, 15-06-2010 |
Ветеран Сообщения: 1273
|
Профиль | Отправить PM | Цитировать Цитата NiOl:
|
|
Отправлено: 21:15, 15-06-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать ну да, при всём богатстве выбора... из штатных кроме FindStr никакой альтернативы:
@Echo Off Set LCase=abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя Set HCase=ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ For /F %%a In ('findstr /ERC:" [%LCase%][^ ]*" 1.txt') Do Set /A LSum+=%%a For /F %%a In ('findstr /ERC:" [%HCase%][^ ]*" 1.txt') Do Set /A HSum+=%%a Echo Затраты на работы : %LSum% Echo Затраты на запчасти: %HSum% pause>nul |
Отправлено: 06:09, 16-06-2010 | #3 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать Всем спасибо!
Вот у меня тоже пришлось findstr задействовать, но в отличае от варианта, предложенного amel27, вышло не 2 прохода, а аж целых 3. |
------- Отправлено: 10:31, 16-06-2010 | #4 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать Все уже, получил нужные циферки, но сама идея различить строчные/прописные буквы только средствами CMD покоя не давала...
Таки соорудил свой батничек без внешних вызовов FindStr... Идея в том, что для set при замене подстроки не важно, какой символ искать, и подменив в строке мелких букв искомую, получаем туже самую строку, если искомая буква строчная, иначе буква прописная. @Echo off SetLocal EnableExtensions SetLocal EnableDelayedExpansion set C=0 set S=0 set W=0 set Chars=abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя for /f "usebackq tokens=2,3 delims= " %%P in ("%~dpn0.txt") do if not %%P_==_ if not %%Q_==_ call :Calc %%P "%%Q" set /a T=%S%+%W% set S= %S% set S=%S:~-11% set W= %W% set W=%W:~-11% set T= %T% set T=%T:~-11% Echo Spares: %S% Echo Service:%W% Echo =================== Echo Total: %T% exit :Calc set ch=%~2 set ch=%ch:~0,1% set b=!Chars:%ch%=%ch%! for /f "tokens=1 delims=.," %%C in ("%1") do set /a C=%%C if %Chars%==%b% (set /a W+=C) else (set /a S+=C) exit /b 1. Неинициализированные в основном теле переменные (в моем случае S и W) работают как локальные, т.е. их значения не сохраняются. 2. Поскольку если используешь "SetLocal EnableDelayedExpansion" - жди случайных искажений имен файлов и некоторых данных, а наличие записи set b=!Chars:%ch%=%ch%! требует включения этого режима, то попробовал включать режим непосредственно перед указанной строкой, а следом отключать - при этом в итогах также получал одни нули. |
|
------- Отправлено: 17:21, 17-06-2010 | #5 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата NiOl:
Цитата NiOl:
по ходу M$ забыли для SET ключик /I аналогично IF Цитата NiOl:
Цитата NiOl:
|
||||
Отправлено: 06:19, 18-06-2010 | #6 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать amel27,
Цитата amel27:
возникла пара вопросов: 1. Как называется тег для раскрывающегося текста ("читать дальше »")? Раньше не озадачивался, а сейчас потерял на форуме тему с описанием тегов. 2. Для каких целей брать все выражение в set в двойные кавычки? (Н: Set "C=%C:.=&REM.%") 3. Использование "&REM." в вышеуказанной строчке... это чтобы получить типа такого: set C=4 & rem Пример? 4. Дополнительное оборачивание в символ процента в Call Set "b=%%Chars:%ch:~0,1%=%ch:~0,1%%%" - для задержки преобразований, чтобы получить 2 этапа обработки? |
|
Отправлено: 13:40, 18-06-2010 | #7 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать NiOl, 1. more :) ; 2. отключение интерпретации спецсимволов строки; 3. угу, и отбросить всё что оказалось справа первого вхождения. 4. yes.
|
Последний раз редактировалось amel27, 20-06-2010 в 05:23. Причина: +код Отправлено: 14:54, 18-06-2010 | #8 |
Старожил Сообщения: 426
|
Профиль | Отправить PM | Цитировать amel27, волшебно!
1. насколько понял, "до кучи" перерабатываются в нормальный вид "красивые" числа типа 1 200 или 1'200 - может пригодиться при "импорте" 2. вот здесь мне показалось черезчур смело: Set /A C=%H%00+%L% - все эти "автоматические преобразования типа" меня настолько раздражают, что я бросил изучать Перл, хотя возлагал на него большие надежды, но цель достигнута! * использую сей код с легкими переделками: описание процедуры в самый конец и удаление перехода "NEXT", вынос расчета общей суммы в конец (Все-таки CMD обрабатывает скрипты неторопясь и процентов 10 времени съеэкономить этим удасться). Соклубники! - У кого есть а/м - и при этом если Вам интересно учесть расходы на своего железного помошника (не знаю кто как называет свою машину) - и при этом Вас устраивает фиксация затрат в виде обычного текстового файла (который можно с легкостью просмотреть как на любом компе под любой ОСью, так и на современных телефонах - в чем сама прелесть TXT и заключается) ТО РЕКОМЕНДУЮ ЛЮБИТЬ И ПОЛЬЗОВАТЬ СКРИПТ тов.Amel27 !!! пример структуры TXT-файла и выдаваемый результат: зы: есть еще одна идейка по расширению, но я пока промолчу, чтоб не быть эгоистом... |
Отправлено: 22:36, 19-06-2010 | #9 |
Старожил Сообщения: 182
|
Профиль | Отправить PM | Цитировать Цитата NiOl:
|
|
------- Отправлено: 23:28, 19-06-2010 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прописные и строчные буквы | Bazaroff | Microsoft Windows 95/98/Me (архив) | 2 | 04-05-2010 21:17 | |
Интерфейс - [решено] Как удалить папку "Моя музыка","Мои Картинки", "Мое видео"? | verdix | Microsoft Windows 2000/XP | 3 | 03-10-2009 23:46 | |
После установки Windows Xp меняются буквы дисков "C" и "D"!!! | ProgrammerPC | Автоматическая установка Windows 2000/XP/2003 | 3 | 26-09-2009 20:12 | |
Delphi - Можно ли запретить в "Edit" вводить буквы? | ShadowMas | Программирование и базы данных | 10 | 19-12-2008 13:06 | |
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") | submaster | Microsoft Windows NT/2000/2003 | 5 | 13-09-2006 12:29 |
|