Страница 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
Очумительный подход! Клёво!
[/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"
Нет нельзя. Удаление сделал.