Показать полную графическую версию : Процентное соотношение имен в файле
f1rstonlyone@vk
08-06-2017, 17:51
Здравствуйте.
Собственно, есть файл, в котором много разных имен/названий того или иного файла. Нужно сделать процентное соотношение этих имен в файле.
Пример:
==Folders==
File1.exe
File1.exe
File2.exe
File2.exe
File1.exe
File3.exe
File1.exe
File2.exe
File4.exe
File1.exe
--> 50% - File1 --> 30% File2 --> 10% File3 --> 10% File4
Собственно, есть файл, в котором много разных имен/названий того или иного файла. »
Упакуйте образец этого файла в архив и приложите к сообщению.
f1rstonlyone@vk
08-06-2017, 18:45
Файл146161
f1rstonlyone@vk,
именно вот так скопировал в "file.txt":
==Folders==
File1.exe
File1.exe
File2.exe
File2.exe
File1.exe
File3.exe
File1.exe
File2.exe
File4.exe
File1.exe
если имена файлов не будут иметь пробелов, то будет работать такой код:
@echo off
<file.txt (for /f "skip=1 delims=" %%a in ('find /v ""^& find /c /v ""') do set /a cs=%%a-1& set /a $_%%a+=1)
for /f "skip=1 tokens=2* delims=_=" %%a in ('set $_') do set /a "pr=%%b*100/%cs%"& cmd/v/c echo %%a=!pr!%%
pause& exit
f1rstonlyone@vk
08-06-2017, 18:59
f1rstonlyone@vk,
именно вот так скопировал в "file.txt":
Код:
==Folders==
File1.exe
File1.exe
File2.exe
File2.exe
File1.exe
File3.exe
File1.exe
File2.exe
File4.exe
File1.exe
если имена файлов не будут иметь пробелов, то будет работать такой код:
Код:
@echo off
<file.txt (for /f "skip=1 delims=" %%a in ('find /v ""^& find /c /v ""') do set /a cs=%%a-1& set /a $_%%a+=1)
for /f "skip=1 tokens=2* delims=_=" %%a in ('set $_') do set /a "pr=%%b*100/%cs%"& cmd/v/c echo %%a=!pr!%%
pause& exit »
Кинул батник в папку с текстовым документом, запустил, выдало
146162
Посредством LogParser (Средство Log Parser 2.2 - TechNet - Microsoft (https://technet.microsoft.com/ru-ru/scriptcenter/dd919274.aspx)):
"C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT Field1, MUL(PROPCOUNT(Field1), 100.0) AS Percent FROM 'C:\Мои проекты\0083\base.txt' GROUP BY Field1 ORDER BY Percent DESC" -i:CSV -headerRow:OFF -q:ON
http://i.imgur.com/3v4tS0B.png
Или так:
"C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT Field1, COUNT(Field1) AS Total, MUL(PROPCOUNT(Field1), 100.0) AS Percent INTO DATAGRID FROM 'C:\Мои проекты\0083\base.txt' GROUP BY Field1 ORDER BY Percent DESC" -i:CSV -headerRow:OFF -q:ON
http://i.imgur.com/c846RfM.png
Или даже так:
"C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT Field1, COUNT(Field1) AS Total INTO Chart.gif FROM 'C:\Мои проекты\0083\base.txt' GROUP BY Field1" -i:CSV -headerRow:OFF -q:ON -o:CHART -chartType:ColumnClustered -groupSize:2048x768 -view:ON
http://i.imgur.com/nYCPykr.png
"C:\Program Files (x86)\Log Parser 2.2\LogParser.exe" "SELECT Field1, COUNT(Field1) AS Total INTO Chart.gif FROM 'C:\Мои проекты\0083\base.txt' GROUP BY Field1" -i:CSV -headerRow:OFF -q:ON -o:CHART -chartType:Pie -groupSize:1024x1024 -view:ON
http://i.imgur.com/5SGef9m.png
megaloman
08-06-2017, 20:33
@Echo OFF
cls
Set "FileIn=Z:\Box_In\file.txt"
SetLocal EnableExtensions EnableDelayedExpansion
Set /A nAll=0
Set /A nName=0
Set "Str="
For /F "usebackq tokens=*" %%s In (`More +1 "%FileIn%" 2^>nul^|Sort`) Do (
If /I Not "!Str!"=="%%s" (
Set /A nName+=1
Set "Str=%%s"
Set /A n!nName!=0
Set "Name!nName!=%%s"
)
Set /A nAll+=1
Set /A n!nName!+=1
)
Set "OutStr="
FOR /L %%i IN (1,1,%nName%) DO Call :Out "Name%%i" "n%%i"
Echo %OutStr%
pause
GoTo :Eof
:Out
Call Set "Name=%%%~1%%"
Call Set "n=%%%~2%%"
Set /A Percent=((n*10000)/nAll+50)/100
Set "OutStr=%OutStr% --^>%Percent%%% - %Name%"
GoTo :Eof
Не нашел ничего общего между файлом base.txt в представленном base.rar и анонсированном тексте в самом вопросе
Обрабатывал файл, где первой строкой идет строка
==Folders==
Я её пропускаю.
И далее
File1.exe
File1.exe
File2.exe
File2.exe
File1.exe
File3.exe
File1.exe
File2.exe
File4.exe
File1.exe
Есть пробелы, нет - не важно.
, выдало »
первую строку конечно лучше убрать, а вот пробелы недопустимы, но выводит у меня нормально:
146164
писалось в принципе на скорую руку, но как вариант, когда лучшего нет, а так варианты лучше использовать предоставленные Iska и megaloman
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.