Страница 1 из 1

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

Добавлено: Ср апр 14, 2010 00:51
Andrey_A
Подскажите, можно ли сделать такое.
Есть текстовый файл, некоторые строки периодически обновляются...
Необходимо подсчитать количество символов тех строк, которые начинаются с "Info" ("Info_1","Info_2"...) и вывести какой-либо отчёт

Добавлено: Ср апр 14, 2010 01:16
Tol!k
Общую сумму или отдельно по каждой строке? Как должен выглядеть отчёт? Подробнее описывай ТЗ

Добавлено: Чт апр 15, 2010 00:24
Andrey_A
Отсчёт должен быть по каждой строке, к примеру:
Info_1 500 знаков
Info_2 655 знаков
Info_3 126 знаков
.....

Добавлено: Чт апр 15, 2010 01:53
Tol!k
Del
Более продвинутая версия здесь

Добавлено: Чт апр 15, 2010 09:30
Batya
[off]
Tol!k
Очумительный подход! Клёво! :idea:
[/off]

Добавлено: Чт апр 15, 2010 12:33
Andrey_A
Tol!k спасибо за отклик, как сделать так, чтобы это срабатывало
1. это bat или cmd?
2. где прописывать параметры внутри кода или в кнопке?

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

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

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


-1

Добавлено: Чт апр 15, 2010 14:46
Batya
Есть особенность - пустое пространство после Info_N считается за 1 символ.

Добавлено: Чт апр 15, 2010 15:08
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= ....

Добавлено: Чт апр 15, 2010 18:34
Tol!k
Batya писал(а):Очумительный подход!
Можно написать на чистом бате, но будет больше пилиться HDD
Andrey_A писал(а):1. это bat или cmd?
Лучше назвать CMD
Andrey_A писал(а):2. где прописывать параметры внутри кода или в кнопке?
В кнопке
Batya писал(а):Есть особенность
К сожалению, есть

Добавлено: Чт апр 15, 2010 18:35
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]*=" — любое кол-во цифр

Добавлено: Чт апр 15, 2010 19:07
Andrey_A
Tol!k низкий тебе поклон!!! Единственное что я у себя добавил - это удаление файла отчета, перед подсчётом, иначе _len.txt каждый раз становится всё больше и больше

Добавлено: Пт апр 16, 2010 12:24
Batya
Andrey_A писал(а):Единственное что я у себя добавил - это удаление файла отчета, перед подсчётом
Можно вместо ">> _len.txt" написать "> _len.txt"

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