Подсчёт к-ва символов в строках .txt файла и вывод отчёта

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

Ответить
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Подсчёт к-ва символов в строках .txt файла и вывод отчёта

Сообщение Andrey_A »

Подскажите, можно ли сделать такое.
Есть текстовый файл, некоторые строки периодически обновляются...
Необходимо подсчитать количество символов тех строк, которые начинаются с "Info" ("Info_1","Info_2"...) и вывести какой-либо отчёт
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Общую сумму или отдельно по каждой строке? Как должен выглядеть отчёт? Подробнее описывай ТЗ
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Отсчёт должен быть по каждой строке, к примеру:
Info_1 500 знаков
Info_2 655 знаков
Info_3 126 знаков
.....
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Del
Более продвинутая версия здесь
Последний раз редактировалось Tol!k Пт апр 16, 2010 20:40, всего редактировалось 2 раза.
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

[off]
Tol!k
Очумительный подход! Клёво! :idea:
[/off]
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Tol!k спасибо за отклик, как сделать так, чтобы это срабатывало
1. это bat или cmd?
2. где прописывать параметры внутри кода или в кнопке?
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Andrey_A писал(а):1. это bat или cmd?
Я ещё бы добавил "или vbs?" :)
Andrey_A писал(а):как сделать так, чтобы это срабатывало
У меня сработало на кнопку

Код: Выделить всё

TOTALCMD#BAR#DATA
%COMMANDER_PATH%\CMD\Подсчёт количества символов в строках файла.CMD
%N Info
%COMMANDER_PATH%\Totalcmd.exe,3
Подсчёт количества символов в строках файла


-1
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Есть особенность - пустое пространство после Info_N считается за 1 символ.
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Tol!k всё работает, спасибо. Есть ещё несколько просьб
Сам файл выглядет таким образом
Info1=информация
Info1_dop=информация
Info1_dop2=информация
...
Info2=информация
Info2_dop=информация
Info2_dop2=информация
...
1. т.к. длинные строки, как сделать так чтобы сами строки (информация) в отчёте не отображались, а только их ПрефиксN - ...
Info1 - 500 знаков
Info2 - 655 знаков
Info3 - 126 знаков
.....
2. Есть много дополнительных строк Info1_dop=, Info1_dop2=, которые в отчёте не нужны, можно их не отображать (т.е.ПрефиксN_...) не отображать), а отображать только строки которые начинаются Info1=, Info2=, Info3= ....
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Batya писал(а):Очумительный подход!
Можно написать на чистом бате, но будет больше пилиться HDD
Andrey_A писал(а):1. это bat или cmd?
Лучше назвать CMD
Andrey_A писал(а):2. где прописывать параметры внутри кода или в кнопке?
В кнопке
Batya писал(а):Есть особенность
К сожалению, есть
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Andrey_A писал(а):Есть ещё несколько просьб
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
@echo off &chcp 1251 >nul &setlocal
rem Параметры: файл.txt "Префикс"
rem Подсчёт количества символов в строках, которые начинаются с "Префикс"
rem Автор: Tol!k

rem В префиксе можно использовать метасимволы:
rem . Подстановочный знак: любой символ
rem * Повтор: ноль или более предшествующих символов или классов символов
rem [класс] Класс символа: любой символ из множества
rem [x-y] Диапазон: любой символ из диапазона

echo Set Args = WScript.Arguments> "%temp%\StrLen.vbs"
echo WScript.StdOut.Write Len(Args(0))>> "%temp%\StrLen.vbs"

set "n=1"
for /f "delims=" %%i in ('findstr /b /r /c:"%~2" "%~1"') do call :cnt "%%~i"
move _len.txt _len.txt.bak 2>nul
set
"n=1"
for /f "tokens=1 delims== " %%i in ('findstr /b /r /c:"%~2" "%~1"') do call :out "%%~i"
del /q "%temp%\StrLen.vbs" &if exist _len.txt start "" _len.txt
exit /b

:cnt
for /f "delims=" %%a in ('cscript.exe //b "%temp%\StrLen.vbs" "%~1"') do (
set /a n+=1 &title Found: %n% &set "a%n%=%%a"
)
goto :eof

:out
set /a n+=1 &call echo %~1 - %%a%n%%% знаков>> _len.txt
goto :eof
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

= ,похоже, является спецсимволом, поэтому выражение с ним приходится заключать в кавычки:

Код: Выделить всё

"Info.=" — любой символ
"Info[0-9]=" — одна цифра
"Info[0-9][0-9]=" — две цифры
"Info[0-9]*=" — любое кол-во цифр
Последний раз редактировалось Tol!k Вс апр 25, 2010 16:25, всего редактировалось 3 раза.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Tol!k низкий тебе поклон!!! Единственное что я у себя добавил - это удаление файла отчета, перед подсчётом, иначе _len.txt каждый раз становится всё больше и больше
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Andrey_A писал(а):Единственное что я у себя добавил - это удаление файла отчета, перед подсчётом
Можно вместо ">> _len.txt" написать "> _len.txt"
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Batya писал(а):Есть особенность
К сожалению, есть
Исправил в последней версии.
Batya писал(а):
Единственное что я у себя добавил - это удаление файла отчета, перед подсчётом
Можно вместо ">> _len.txt" написать "> _len.txt"
Нет нельзя. Удаление сделал.
Ответить