CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?

Аватара пользователя
NiOl

CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?

Сообщение NiOl »

Ради интереса веду "лог" затрат на свое "корыто".

Формат таков:

сумма[TAB]дата[TAB]сабж

при этом если поле сабж начинается с маленькой буквы, то это "работы", а с большой - "запчасти".

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



Никто не сталкивался с подобными задачами? Может поделитесь опытом?
Аватара пользователя
amel27

Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?

Сообщение amel27 »

Цитата NiOl:



сумма[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 - [решено] Как "красиво" распознать Строчные/Прописные буквы?

Сообщение amel27 »

ну да, при всём богатстве выбора... из штатных кроме 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

P.S. убила реализация интервала в классе FindStr: "[a-c]" соответствует "[aAbBc]"... Изображение
Аватара пользователя
El Sanchez

Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?

Сообщение El Sanchez »

Всем спасибо!

Вот у меня тоже пришлось findstr задействовать, но в отличае от варианта, предложенного amel27, вышло не 2 прохода, а аж целых 3.
Аватара пользователя
NiOl

Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?

Сообщение NiOl »

Всем спасибо!

Вот у меня тоже пришлось findstr задействовать, но в отличае от варианта, предложенного amel27, вышло не 2 прохода, а аж целых 3.
Аватара пользователя
NiOl

Re: CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?

Сообщение NiOl »

Цитата NiOl:



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,


Цитата 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 »

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 - [решено] Как "красиво" распознать Строчные/Прописные буквы?

Сообщение amel27 »

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 »

Цитата NiOl:



ТО РЕКОМЕНДУЮ ЛЮБИТЬ И ПОЛЬЗОВАТЬ СКРИПТ тов.Amel27 !!!
CMD/BAT - [решено] Как "красиво" распознать Строчные/Прописные буквы?




Ну для подсчета расходов на А/М проще изначально добавить столбик запчасть/работа и использовать электронную таблицу. А само по себе распознавание может и пригодится.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»