Подсчет количества одинаковых символов в txt файле
Доброго времени суток. Прошу помощи в написании bat файла, который будет выявлять общее количество одинаковых символов в txt файле,с выводом количества совпадений по "N"символу.
|
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» из подсчёта убраны.
|
Цитата:
Цитата Iska
ia_del@vk, пакетные файлы для сего не очень годятся. Я буквально на днях приводил коллеге blackeangel гипотетический пример реализации на WSH, но по другому поводу. В Вашем случае сие может выглядеть так (с добавлением чтения из файла):
Скрытый текст
Путь к исходному файлу задаётся параметром скрипта. Символы конца строки «0x0D, 0x0A» из подсчёта убраны. »
|
Работает на ура.можно ли добавить словарь "кастомных" символов?
|
Цитата:
Цитата ia_del@vk
можно ли добавить словарь "кастомных" символов? »
|
Что это значит? Поясните.
Скрипт перебирает содержимое файла по одному символу и считает их количество (за вычетом символов конца строки). Вы хотите, чтобы некоторые символы были исключены из подсчёта, так?
|
Цитата:
Цитата 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
Не вижу особого смысла в задаче, разве что учебный. А по делу неплохо бы еще отсортировать вывод в порядке следования кодов символов.
|
megaloman, хе-хе, интересная задумка с Replace'ом :).
|
Вот симбиоз батника и 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"');}
|
Цитата:
Цитата megaloman
var strContent = Txt.ReadAll().replace(/\r|\n/g, ''); »
|
— не? Альтернатива тоже работает, но, насколько я понимаю, в большее число подстановок.
|
Время: 14:20.
© OSzone.net 2001-