Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Подсчёт к-ва раз встречающейся фразы в файле и вывод отчёта
Goto page 1, 2  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Fri Apr 23, 2010 20:41    Post subject: Подсчёт к-ва раз встречающейся фразы в файле и вывод отчёта Reply with quote

Подскажите, как можно подсчитать сколько раз встречается в тестовом файле определённая фраза (кусок текста) и как вывести после этого отчёт: Текст .... встречается 55 раз

 !  Avada:
Заголовок слегка поправлен.
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Sat Apr 24, 2010 00:45    Post subject: Reply with quote

Это вопрос явно не сюда, а в Программное обеспечение. Таких программ в сети пропасть (попробуй поискать в Яндексе по ключевым словам "текстологический анализ"). Я использую только одну функцию - удаление дубликатов строк. Помогает Text Duplicate Killer, хотя именно той функции, которую ты запрашиваешь, он не имеет.
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Sat Apr 24, 2010 01:10    Post subject: Reply with quote

Я задал вопрос именно сюда исходя из темы
http://forum.wincmd.ru/viewtopic.php?t=13172&start=0&postdays=0&postorder=asc&highlight=
где Tol!k блистательно ответил, и если бы и этот вопрос решался примерно подобным образом было бы великолепно, сторонний софт хорошо, но это много лишних нажатий и я пока не встречал подходящего
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sat Apr 24, 2010 15:19    Post subject: Reply with quote

Пробовал подобные программы?
глава HTML-анализатор wrote:
HTML-анализатор предоставляет также возможность получения обратных отчетов, то есть можно выбирать не страницу сайта для анализа, а фразу (слово) и просматривать ее параметры по всем разобранным страницам.
Back to top
View user's profile Send private message
Andrey_A



Joined: 10 Apr 2009
Posts: 394
Location: Сочи

Post (Separately) Posted: Sat Apr 24, 2010 22:27    Post subject: Reply with quote

Целый день потратил на поиск ответа в интернете. Накачал кучу сторонних тестовых утилит, но ни одна не удовлетворила. В конце наткнулся на статью о поиске строк с использованием батника. Пишу впервые, если что подправите, вот что получилось:
Code:
TOTALCMD#BAR#DATA
%ComSpec% /k echo Фраза "Button" встречается  в ...&
find "Button" /c /i %P%N &echo строках
shell32.dll,55
Подсчёт к-ва строк имеющих заданную фразу в файле под курсором


-1

Это решало задачу частично, и к тому же русскую фразу батник отказывался искать, как частный случай ещё одна кнопка:
Code:
TOTALCMD#BAR#DATA
%ComSpec% /k echo Пользовательские команды "em_" встречаются  в главном меню в &
find "em_and" /c "%%COMMANDER_PATH%%\Language\Wcmd_Rus.mnu" &echo строках
shell32.dll,55
Подсчёт к-ва строк имеющих заданную фразу в главном меню


-1

После 8 часов отыскивания информации на эту тему в нете, случайно наткнулся на скрипт, который искал к-во сочетаний «Кря» во введенном слове, а мне необходимо было в файле... я было забросил всё, как увидел тему "разрезания текстового файла"... спустя час, методом проб, ошибок и соединения этих двух скриптов у меня вылетело окно с подсчётом. Не судите строго, как это заработало я сам не понимаю, но кто хочет тот добьётся (если что подправите)
Code:
'=====================================================================
' Подсчёт к-ва раз встречающейся фразы в файле и вывод отчёта
'
' Параметры:
' {файл} {фраза}
'
' Пример вызова из TC:
' %P%N "текст"
'=====================================================================
Dim fso, InFile, Stroka, ts, i, s, fstr

Set fso = CreateObject("Scripting.FileSystemObject")
InFile = WScript.Arguments(0)
fstr = WScript.Arguments(1)
s = 0
Set ts=fso.OpenTextFile(InFile,1)

Do Until ts.AtEndOfStream
  Stroka=ts.ReadLine
   For i = 1 to (len(Stroka)-len(fstr)+1)
     If mid(Stroka,i,len(fstr))=fstr Then
       s=s+1
     End If
  Next
Loop

ts.Close
Set ts=Nothing
Set fso = Nothing
msgbox "Фраза" & chr (34) & fstr & chr (34) & " повторяется в тексте" & str & " " & Cstr(s) & " раз(а)"
WScript.Quit

Спасибо Вахмурка и Tol!k за направление!
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun Apr 25, 2010 12:04    Post subject: Reply with quote

vbs-скрипт в файле с содержимым
Code:
test test test test
фразу "test test" находит 3 раза.

Вот такой батник
Code:
@echo off &chcp 1251 >nul
set "str=%~2"
set "str=%str:\=\\%"
set "str=%str:/=\/%"
set "str=%str:.=\.%"
set "str=%str: =\s%"
ssed.exe -n s/%str%/\n+1\n/pg "%~1" |ssed.exe -n /^^+1$/= |ssed.exe -n $=
находит 2 раза, но имеет проблемы с символом *
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2571

Post (Separately) Posted: Sun Apr 25, 2010 12:38    Post subject: Reply with quote

Tol!k wrote:
фразу "test test" находит 3 раза.

1 и 2 слово - раз, 2 и 3 слово - два, 3 и 4 слово - три. Разве это не верно?
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun Apr 25, 2010 12:49    Post subject: Reply with quote

sa wrote:
Разве это не верно?
Давай не просто считать, а заменять найденное на, например, "нашёл". Сколько замен получится?
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2571

Post (Separately) Posted: Sun Apr 25, 2010 14:02    Post subject: Reply with quote

Tol!k wrote:
Сколько замен получится?

Если искать в одном файле, а результаты изменений сохранять в другом, то замен будет три.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun Apr 25, 2010 14:10    Post subject: Reply with quote

А что получится в рез-те обратной замены ("нашёл" на "test test") ?
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2571

Post (Separately) Posted: Sun Apr 25, 2010 14:16    Post subject: Reply with quote

Tol!k wrote:
А что получится в рез-те обратной замены

Будет шесть "test".
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun Apr 25, 2010 14:38    Post subject: Reply with quote

Не смущает, что в исходном файле было 4 ?
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2571

Post (Separately) Posted: Sun Apr 25, 2010 14:57    Post subject: Reply with quote

Не смущает. Всё зависит от постановки задачи. Но скорее, упоминание в стартовом топике сочетания "кусок текста" говорит в пользу твоего варианта.
Back to top
View user's profile Send private message
Batya



Joined: 15 Dec 2004
Posts: 2218
Location: Москва, Россия

Post (Separately) Posted: Mon Apr 26, 2010 09:49    Post subject: Reply with quote

Andrey_A wrote:
если что подправите

Подправил:
Code:
'=====================================================================
' Подсчёт к-ва раз встречающейся фразы в файле и вывод отчёта
'
' Параметры:
' {файл} {фраза}
'
' Пример вызова из TC:
' %P%N "текст"
'=====================================================================
Dim fso, InFile, fstr, L

InFile  = WScript.Arguments(0)
fstr    = WScript.Arguments(1)
L       = Len(fstr)
s       = 0
Set fso = CreateObject("Scripting.FileSystemObject")

s = Find(fso.OpenTextFile(InFile,1).ReadAll, fstr)

Set fso = Nothing
msgbox "Фраза """ & fstr & """ повторяется в тексте " & s & " раз(а)"
WScript.Quit

Function Find(pStr, pFStr)
  Dim lp
  Find = 0
  lp = InStr(1, pStr, pFStr, 1)
  If lp > 0 Then Find = Find(Mid(pStr, lp + L + 1), pFStr) + 1
End Function


Andrey_A
В связи со спором Tol!k и sa, хочется уточнить - для варианта поиска "test test" в "test test test test" для тебя какое значение является правильным? Сейчас я сделал скрипт в согласии с Tol!k-ом.
_________________
Нет, я не сплю. Я просто медленно моргаю.
Back to top
View user's profile Send private message
Lev



Joined: 02 Mar 2005
Posts: 392

Post (Separately) Posted: Mon Apr 26, 2010 16:17    Post subject: Reply with quote

Вариация
Code:
'=====================================================================
' Подсчёт к-ва раз встречающейся фразы в файле и вывод отчёта
'
' Параметры:
' {файл} {фраза}
'
' Пример вызова из TC:
' %P%N "текст"
'=====================================================================
Dim fso, InFile

Set fso = CreateObject("Scripting.FileSystemObject")

Dim re

Set re = New RegExp
re.Global = True
re.IgnoreCase = True
re.MultiLine = True

InFile     = WScript.Arguments(0)
re.Pattern = WScript.Arguments(1)

s = re.Execute(fso.OpenTextFile(InFile,1).ReadAll).Count

msgbox "Фраза """ & re.Pattern & """ повторяется в тексте " & s & " раз(а)"
Set fso = Nothing
Set re = Nothing
WScript.Quit
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group