Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Процентное соотношение имен в файле (http://forum.oszone.net/showthread.php?t=327446)

f1rstonlyone@vk 08-06-2017 17:51 2742983

Процентное соотношение имен в файле
 
Здравствуйте.
Собственно, есть файл, в котором много разных имен/названий того или иного файла. Нужно сделать процентное соотношение этих имен в файле.

Пример:

==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

Iska 08-06-2017 18:42 2743003

Цитата:

Цитата f1rstonlyone@vk
Собственно, есть файл, в котором много разных имен/названий того или иного файла. »

Упакуйте образец этого файла в архив и приложите к сообщению.

f1rstonlyone@vk 08-06-2017 18:45 2743005

Вложений: 1
ФайлФайл 146161

alpap 08-06-2017 18:52 2743008

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 2743011

Вложений: 1
Цитата:

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

Iska 08-06-2017 20:18 2743021

Посредством LogParser (Средство Log Parser 2.2 - TechNet - Microsoft):
Код:

"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
Скрытый текст

Или так:
Код:

"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
Скрытый текст

Или даже так:
Код:

"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
Скрытый текст

Код:

"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
Скрытый текст

megaloman 08-06-2017 20:33 2743024

Вот вариант решения
Код:

@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

Есть пробелы, нет - не важно.

alpap 08-06-2017 21:47 2743034

Цитата:

Цитата f1rstonlyone@vk
, выдало »

первую строку конечно лучше убрать, а вот пробелы недопустимы, но выводит у меня нормально:
Файл 146164
писалось в принципе на скорую руку, но как вариант, когда лучшего нет, а так варианты лучше использовать предоставленные Iska и megaloman


Время: 09:15.

Время: 09:15.
© OSzone.net 2001-