| View previous topic :: View next topic   | 
	
	
	
		| Author | 
		Message | 
	
	
		Andrey_A
 
  
  Joined: 10 Apr 2009 Posts: 394 Location: Сочи
  | 
		
			
				  (Separately) Posted: Fri Apr 23, 2010 20:41    Post subject: Подсчёт к-ва раз встречающейся фразы в файле и вывод отчёта | 
				     | 
			 
			
				
  | 
			 
			
				Подскажите, как можно подсчитать сколько раз встречается в тестовом файле определённая фраза (кусок текста) и как вывести после этого отчёт: Текст .... встречается 55 раз
 
 
         |                  !  |       Avada: |              | Заголовок слегка поправлен. |       | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		Вахмурка
 
  
  Joined: 27 Dec 2004 Posts: 2586 Location: Большая деревня Москва
  | 
		
			
				  (Separately) Posted: Sat Apr 24, 2010 00:45    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Это вопрос явно не сюда, а в Программное обеспечение. Таких программ в сети пропасть (попробуй поискать в Яндексе по ключевым словам "текстологический анализ"). Я использую только одну функцию - удаление дубликатов строк. Помогает Text Duplicate Killer, хотя именно той функции, которую ты запрашиваешь, он не имеет. _________________ Сайт PowerPro+Total Commander
 
Скрипты PowerPro для Total Commander
 
* * *
 
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		Andrey_A
 
  
  Joined: 10 Apr 2009 Posts: 394 Location: Сочи
  | 
		 | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		Tol!k
 
  
  Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
  | 
		
			
				  (Separately) Posted: Sat Apr 24, 2010 15:19    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Пробовал подобные программы?
 
 	  | глава HTML-анализатор wrote: | 	 		  | HTML-анализатор предоставляет также возможность получения обратных отчетов, то есть можно выбирать не страницу сайта для анализа, а фразу (слово) и просматривать ее параметры по всем разобранным страницам. | 	 
  | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		Andrey_A
 
  
  Joined: 10 Apr 2009 Posts: 394 Location: Сочи
  | 
		
			
				  (Separately) Posted: Sat Apr 24, 2010 22:27    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Целый день потратил на поиск ответа в интернете. Накачал кучу сторонних тестовых утилит, но ни одна не удовлетворила. В конце наткнулся на статью о поиске строк с использованием батника. Пишу впервые, если что подправите, вот что получилось: 	  | 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 | 
		 | 
	
	
		  | 
	
	
		Tol!k
 
  
  Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
  | 
		
			
				  (Separately) Posted: Sun Apr 25, 2010 12:04    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				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 | 
		 | 
	
	
		  | 
	
	
		sa
 
 
  Joined: 29 Apr 2009 Posts: 2709
 
  | 
		
			
				  (Separately) Posted: Sun Apr 25, 2010 12:38    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Tol!k wrote: | 	 		  фразу "test test" находит 3 раза.
 
 | 	  
 
 1 и 2 слово - раз, 2 и 3 слово - два, 3 и 4 слово - три. Разве это не верно? | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		Tol!k
 
  
  Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
  | 
		
			
				  (Separately) Posted: Sun Apr 25, 2010 12:49    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | sa wrote: | 	 		  | Разве это не верно? | 	  Давай не просто считать, а заменять найденное на, например, "нашёл". Сколько замен получится? | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		sa
 
 
  Joined: 29 Apr 2009 Posts: 2709
 
  | 
		
			
				  (Separately) Posted: Sun Apr 25, 2010 14:02    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Tol!k wrote: | 	 		  | Сколько замен получится? | 	  
 
Если искать в одном файле, а результаты изменений сохранять в другом, то замен будет три. | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		Tol!k
 
  
  Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
  | 
		
			
				  (Separately) Posted: Sun Apr 25, 2010 14:10    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				| А что получится в рез-те обратной замены ("нашёл" на "test test") ? | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		sa
 
 
  Joined: 29 Apr 2009 Posts: 2709
 
  | 
		
			
				  (Separately) Posted: Sun Apr 25, 2010 14:16    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | Tol!k wrote: | 	 		  | А что получится в рез-те обратной замены | 	  
 
Будет шесть "test". | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		Tol!k
 
  
  Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
  | 
		
			
				  (Separately) Posted: Sun Apr 25, 2010 14:38    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				| Не смущает, что в исходном файле было 4 ? | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		sa
 
 
  Joined: 29 Apr 2009 Posts: 2709
 
  | 
		
			
				  (Separately) Posted: Sun Apr 25, 2010 14:57    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				| Не смущает. Всё зависит от постановки задачи. Но скорее, упоминание в стартовом топике сочетания "кусок текста" говорит в пользу твоего варианта. | 
			 
		  | 
	
	
		| Back to top | 
		 | 
	
	
		  | 
	
	
		Batya
 
  
  Joined: 15 Dec 2004 Posts: 2229 Location: Москва, Россия
  | 
		
			
				  (Separately) Posted: Mon Apr 26, 2010 09:49    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				 	  | 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 | 
		 | 
	
	
		  | 
	
	
		Lev
 
  
  Joined: 02 Mar 2005 Posts: 392
 
  | 
		
			
				  (Separately) Posted: Mon Apr 26, 2010 16:17    Post subject:  | 
				     | 
			 
			
				
  | 
			 
			
				Вариация 	  | 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 | 
		 | 
	
	
		  | 
	
	
		 |