|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Подсчет количества одинаковых символов в txt файле |
|
CMD/BAT - Подсчет количества одинаковых символов в txt файле
|
Новый участник Сообщения: 7 |
Доброго времени суток. Прошу помощи в написании bat файла, который будет выявлять общее количество одинаковых символов в txt файле,с выводом количества совпадений по "N"символу.
|
|
Отправлено: 08:39, 15-10-2017 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать ia_del@vk, пакетные файлы для сего не очень годятся. Я буквально на днях приводил коллеге blackeangel гипотетический пример реализации на WSH, но по другому поводу. В Вашем случае сие может выглядеть так (с добавлением чтения из файла):
Скрытый текст
Option Explicit Dim strSourceFile Dim objFSO Dim strContent Dim i Dim strSymbol Dim strKey If WScript.Arguments.Count = 1 Then strSourceFile = WScript.Arguments.Item(0) Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objFSO.FileExists(strSourceFile) Then With objFSO.OpenTextFile(strSourceFile) strContent = Replace(.ReadAll(), vbCrLf, "") .Close End With With WScript.CreateObject("Scripting.Dictionary") For i = 1 To Len(strContent) strSymbol = Mid(strContent, i, 1) If Not .Exists(strSymbol) Then .Add strSymbol, 1 Else .Item(strSymbol) = .Item(strSymbol) + 1 End If Next WScript.Echo "Symbol", vbTab, "Count" WScript.Echo "======", vbTab, "=====" For Each strKey In .Keys WScript.Echo strKey, vbTab, .Item(strKey) Next .RemoveAll End With Else WScript.Echo "Can't find source file [" & strSourceFile & "]." WScript.Quit 2 End If Set objFSO = Nothing Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>" WScript.Quit 1 End If WScript.Quit 0 Путь к исходному файлу задаётся параметром скрипта. Символы конца строки «0x0D, 0x0A» из подсчёта убраны. |
Отправлено: 09:32, 15-10-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 7
|
Профиль | Сайт | Отправить PM | Цитировать Цитата Iska:
|
|
Отправлено: 14:00, 15-10-2017 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата ia_del@vk:
Скрипт перебирает содержимое файла по одному символу и считает их количество (за вычетом символов конца строки). Вы хотите, чтобы некоторые символы были исключены из подсчёта, так? |
|
Отправлено: 14:23, 15-10-2017 | #4 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата Iska:
Набрался наглости извратить скрипт, чтобы предложить немного другой способ подсчета. Не знаю, что быстре, да и, наверное, это несущественно. Добавил отображение кода символа в выводе.
Option Explicit Dim strSourceFile Dim objFSO Dim strContent Dim i Dim nn Dim strSymbol Dim strRezult Dim strOne If WScript.Arguments.Count = 1 Then strSourceFile = WScript.Arguments.Item(0) Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If objFSO.FileExists(strSourceFile) Then With objFSO.OpenTextFile(strSourceFile) strContent = Replace(.ReadAll(), vbCrLf, "") .Close End With nn = Len(strContent) strRezult = "" Do While nn > 0 strOne = Mid(strContent, 1, 1) strContent = Replace(strContent, strOne, "") i = Len(strContent) strRezult = strRezult + strOne + vbTab + CStr(Asc(strOne)) + vbTab + CStr(nn - i) If i<> 0 Then strRezult = strRezult + vbcrlf nn = i Loop WScript.Echo "Symbol" + vbTab + "Code" + vbTab + "Count" WScript.Echo "======" + vbTab + "====" + vbTab + "=====" WScript.Echo strRezult Else WScript.Echo "Can't find source file [" & strSourceFile & "]." WScript.Quit 2 End If Set objFSO = Nothing Else WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>" WScript.Quit 1 End If WScript.Quit 0 |
||
------- Отправлено: 18:43, 15-10-2017 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать megaloman, хе-хе, интересная задумка с Replace'ом
![]() |
Отправлено: 19:42, 15-10-2017 | #6 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Вот симбиоз батника и js-скрипта. Сохранить файл с расширением .bat, имя обрабатываемого файла передайте в аргументе, на выходе - текстовый файл с протоколом работы
@set @E=1; /* @Echo Off If "%~1"=="" ( Cls Echo Не указано имя входного файла Echo: Pause GoTo :Eof ) cscript //NoLogo /E:jscript "%~dpnx0" "%~1" >"%~dpnx0.txt" GoTo :Eof */ var oArg=WScript.Arguments; if (oArg.Count()>0) { var FileTxt,Txt,err; var FileTxt=oArg(0); var FSO=WScript.CreateObject("Scripting.FileSystemObject"); try {Txt=FSO.OpenTextFile(FileTxt);} catch (err) { if (err != 0) { WScript.Echo("Open file "+FileTxt+"\nerror: "+err.number+"\n"+err.description); WScript.Quit(); } } var strContent = Txt.ReadAll().replace(/\r|\n/g, ''); Txt.Close(); var str1,i; var nn=strContent.length; WScript.Echo('Symbol\tCount\n======\t====='); while (nn>0) { str1=strContent.substr(0,1); strContent=strContent.replace(new RegExp('['+str1+']','g'),""); i=strContent.length; WScript.Echo(str1,'\t',(nn-i)); nn=i; } } else {WScript.Echo('using script \n================= \n\n'+'cscript.exe //nologo "scriptname.js" "input text" >"outputfile.txt"');} |
------- Отправлено: 21:55, 16-10-2017 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 22:23, 16-10-2017 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Подсчет количества чисел в файле | nastasa | Скриптовые языки администрирования Windows | 2 | 09-10-2016 18:47 | |
CMD/BAT - Подсчет количества одинаковых строк в txt файле | lexis1980 | Скриптовые языки администрирования Windows | 1 | 19-11-2013 11:46 | |
CMD/BAT - Подсчет количества строк в текстовом файле | sl1mus | Скриптовые языки администрирования Windows | 3 | 28-06-2012 21:29 | |
CMD/BAT - Подсчет количества целых чисел в текстовом файле | Hardip | Скриптовые языки администрирования Windows | 5 | 08-12-2010 14:49 | |
Подсчет количества лицензий. | Zergling | Microsoft Windows NT/2000/2003 | 0 | 24-04-2007 14:57 |
|