CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
-
NiOl
CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
Ради интереса веду "лог" затрат на свое "корыто".
Формат таков:
сумма[TAB]дата[TAB]сабж
при этом если поле сабж начинается с маленькой буквы, то это "работы", а с большой - "запчасти".
сегодня задумался, сколькож я потратил и быстренько накатал батничек для подсчета общей суммы. Но поскольку в самом логе уже заложено разделение работ и запчастей, захотелось "добавить" разделение общей суммы на составляющие, но как оказалось отличить строчные/прописные буквы весьма проблематично. Во всяком случае сделать это "красиво", не увеличивая существенно время выполнения батника так и не удалось.
Никто не сталкивался с подобными задачами? Может поделитесь опытом?
Формат таков:
сумма[TAB]дата[TAB]сабж
при этом если поле сабж начинается с маленькой буквы, то это "работы", а с большой - "запчасти".
сегодня задумался, сколькож я потратил и быстренько накатал батничек для подсчета общей суммы. Но поскольку в самом логе уже заложено разделение работ и запчастей, захотелось "добавить" разделение общей суммы на составляющие, но как оказалось отличить строчные/прописные буквы весьма проблематично. Во всяком случае сделать это "красиво", не увеличивая существенно время выполнения батника так и не удалось.
Никто не сталкивался с подобными задачами? Может поделитесь опытом?
-
amel27
Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
Цитата NiOl:
сумма[TAB]дата[TAB]сабж
NiOl, я так понимаю 3 токен пропарсить. Тогда в качестве примера:
Код:
сумма[TAB]дата[TAB]сабж
CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
NiOl, я так понимаю 3 токен пропарсить. Тогда в качестве примера:
Код:
Код: Выделить всё
@Echo Off
Set Symbols=ABCDEFGHIJKLMNOPQRSTUVWXYZ
For /F "Tokens=2*" %%A In (zatraty.log) Do Echo %%B|FindStr \^nul&&Echo Сабж %%B начинается с большой буквы||Echo Сабж %%B начинается с маленькой буквы-
amel27
Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
ну да, при всём богатстве выбора... из штатных кроме FindStr никакой альтернативы:
Код:
P.S. убила реализация интервала в классе FindStr: "[a-c]" соответствует "[aAbBc]"...
Код:
Код: Выделить всё
@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>nulP.S. убила реализация интервала в классе FindStr: "[a-c]" соответствует "[aAbBc]"...

-
El Sanchez
Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
Всем спасибо!
Вот у меня тоже пришлось findstr задействовать, но в отличае от варианта, предложенного amel27, вышло не 2 прохода, а аж целых 3.
Вот у меня тоже пришлось findstr задействовать, но в отличае от варианта, предложенного amel27, вышло не 2 прохода, а аж целых 3.
-
NiOl
Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
Всем спасибо!
Вот у меня тоже пришлось findstr задействовать, но в отличае от варианта, предложенного amel27, вышло не 2 прохода, а аж целых 3.
Вот у меня тоже пришлось findstr задействовать, но в отличае от варианта, предложенного amel27, вышло не 2 прохода, а аж целых 3.
-
NiOl
Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
Цитата NiOl:
usebackq tokens=2,3
гм... так всё-таки сначала дата, потом сумма?..
Цитата NiOl:
для set при замене подстроки не важно, какой символ искать
интересно, не думал что и для русских так же... учитывая половинчатую локализацию CMD
по ходу M$ забыли для SET ключик /I аналогично IF
Цитата NiOl:
Неинициализированные в основном теле переменные (в моем случае S и W) работают как локальные
не заметил... возможно, это связано с переносами SetLocal - она ограничивает область видимости
Цитата NiOl:
наличие записи set b=!Chars:%ch%=%ch%! требует включения этого режима
можно обойти через CALL:
Код:
usebackq tokens=2,3
CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
гм... так всё-таки сначала дата, потом сумма?..

Цитата NiOl:
для set при замене подстроки не важно, какой символ искать
CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
интересно, не думал что и для русских так же... учитывая половинчатую локализацию CMD
по ходу M$ забыли для SET ключик /I аналогично IF

Цитата NiOl:
Неинициализированные в основном теле переменные (в моем случае S и W) работают как локальные
CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
не заметил... возможно, это связано с переносами SetLocal - она ограничивает область видимости
Цитата NiOl:
наличие записи set b=!Chars:%ch%=%ch%! требует включения этого режима
CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
можно обойти через CALL:
читать дальше »
Код:
Код: Выделить всё
@Echo Off
Set Chars=abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя
For /F "Usebackq Tokens=2* Delims= " %%P in ("%~n0.txt") Do If Not %%P_==_ If Not %%Q_==_ Set "C=%%P"& Set "ch=%%Q"& Call :CALC
GoTo :NEXT
:CALC
Set "C=%C: =%"
Set "C=%C:.=&REM.%"
Set "C=%C:,=&REM.%"
Call Set "b=%%Chars:%ch:~0,1%=%ch:~0,1%%%"
If %Chars%==%b% (Set /A T+=C,W+=C) Else Set /A T+=C,S+=C
GoTo :EOF
:NEXT
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%-
amel27
Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
amel27,
Цитата amel27:
гм... так всё-таки сначала дата, потом сумма?..
пока для меня этот текстовичек был тупо памяткой расходов, сумма стояла первой, но как только я "подсчитал" расходы в первый раз, он как-то сам перескочил в разряд логов и я тутже (спасибо Евгению за FAR) поменял столбцы местами...
возникла пара вопросов:
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 этапа обработки?
Цитата amel27:
гм... так всё-таки сначала дата, потом сумма?..
CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
пока для меня этот текстовичек был тупо памяткой расходов, сумма стояла первой, но как только я "подсчитал" расходы в первый раз, он как-то сам перескочил в разряд логов и я тутже (спасибо Евгению за FAR) поменял столбцы местами...
возникла пара вопросов:
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 этапа обработки?
-
NiOl
Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
NiOl, 1. more
; 2. отключение интерпретации спецсимволов строки; 3. угу, и отбросить всё что оказалось справа первого вхождения. 4. yes.
вариант с учетом копеек:
Код:
читать дальше »
вариант с учетом копеек:
Код:
Код: Выделить всё
@Echo Off
Set Chars=abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя
For /F "Usebackq Tokens=2* Delims= " %%P In ("%~n0.txt") Do If Not %%P_==_ If Not %%Q_==_ (
For /F "Tokens=1,2 Delims=.," %%A In ("%%P") Do Set H=%%A& Set L=%%B& Set "ch=%%Q"& Call :CALC)
GoTo :NEXT
:CALC
Set H=%H: =%& Set L=%L%00
Set H=%H:'=%& Set L=%L:~0,2%
Set /A L=1%L%%%100
Set /A C=%H%00+%L%
Call Set "b=%%Chars:%ch:~0,1%=%ch:~0,1%%%"
If %Chars%==%b% (Set /A T+=C,W+=C) Else Set /A T+=C,S+=C
GoTo :EOF
:NEXT
Set S= %S:~0,-2%.%S:~-2%
Set S=%S:~-11%
Set W= %W:~0,-2%.%W:~-2%
Set W=%W:~-11%
Set T= %T:~0,-2%.%T:~-2%
Set T=%T:~-11%
Echo Spares: %S%
Echo Service:%W%
Echo ===================
Echo Total: %T%-
amel27
Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
NiOl, 1. more
; 2. отключение интерпретации спецсимволов строки; 3. угу, и отбросить всё что оказалось справа первого вхождения. 4. yes.
вариант с учетом копеек:
Код:
читать дальше »
вариант с учетом копеек:
Код:
Код: Выделить всё
@Echo Off
Set Chars=abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщъыьэюя
For /F "Usebackq Tokens=2* Delims= " %%P In ("%~n0.txt") Do If Not %%P_==_ If Not %%Q_==_ (
For /F "Tokens=1,2 Delims=.," %%A In ("%%P") Do Set H=%%A& Set L=%%B& Set "ch=%%Q"& Call :CALC)
GoTo :NEXT
:CALC
Set H=%H: =%& Set L=%L%00
Set H=%H:'=%& Set L=%L:~0,2%
Set /A L=1%L%%%100
Set /A C=%H%00+%L%
Call Set "b=%%Chars:%ch:~0,1%=%ch:~0,1%%%"
If %Chars%==%b% (Set /A T+=C,W+=C) Else Set /A T+=C,S+=C
GoTo :EOF
:NEXT
Set S= %S:~0,-2%.%S:~-2%
Set S=%S:~-11%
Set W= %W:~0,-2%.%W:~-2%
Set W=%W:~-11%
Set T= %T:~0,-2%.%T:~-2%
Set T=%T:~-11%
Echo Spares: %S%
Echo Service:%W%
Echo ===================
Echo Total: %T%-
NiOl
Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
Цитата NiOl:
ТО РЕКОМЕНДУЮ ЛЮБИТЬ И ПОЛЬЗОВАТЬ СКРИПТ тов.Amel27 !!!
Ну для подсчета расходов на А/М проще изначально добавить столбик запчасть/работа и использовать электронную таблицу. А само по себе распознавание может и пригодится.
ТО РЕКОМЕНДУЮ ЛЮБИТЬ И ПОЛЬЗОВАТЬ СКРИПТ тов.Amel27 !!!
CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?
Ну для подсчета расходов на А/М проще изначально добавить столбик запчасть/работа и использовать электронную таблицу. А само по себе распознавание может и пригодится.