![]() |
Поиск повторяющихся слов в тексте при помощи StringRegExp
Привет всем!
Возможно ли используя функцию StringRegExp определить наиболее часто повторяющееся слово в тексте? Пример текста: 18.02.2014 15:58:13 user1 18.02.2014 17:30:58 user2 19.02.2014 12:54:34 user2 19.02.2014 13:14:28 user5 20.02.2014 14:59:43 user2 20.02.2014 16:31:05 user4 21.02.2014 11:47:27 user2 23.02.2014 12:21:25 user2 23.02.2014 10:35:14 user3 24.02.2014 13:50:20 user2 Слово для поиска - userX может содержать латинские буквы, цифры, символы "_" и "-" Если через StringRegExp этого сделать нельзя, какой еще метод можно использовать? p.s. желательно с примерами. Заранее спасибо! |
Проще всего — представлять текстовый файл как базу данных. Тогда можно, использовав, например, OLEDB с запросом вида «SELECT COUNT(Field3) AS TotalField3 GROUP Field3 ORDER BY TotalField3 DESC», определить наиболее часто встречающееся из «UserXX».
|
Как-то не дочитал:
Цитата:
Результат: P.S. Хорошо бы образец реального файла. |
Вложений: 1
Файл во вложении
При выполнении кода, на тексте для примера, указанного в первом сообщении, все работает При выполнении кода с данным файлом получаю ошибку: The requested action with this object has failed.: $oRecordSet.Open( "SELECT TOP 1 [Name], COUNT(*) AS [Count] " & "FROM [" & $sSourceFile & "] " & "GROUP BY [Name] " & "ORDER BY COUNT(*) DESC", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & $sPathToSchema & "';Extended Properties=""text;""", $adOpenStatic, $adLockOptimistic, $adCmdText ) $oRecordSet.Open( "SELECT TOP 1 [Name], COUNT(*) AS [Count] " & "FROM [" & $sSourceFile & "] " & "GROUP BY [Name] " & "ORDER BY COUNT(*) DESC", "Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" & $sPathToSchema & "';Extended Properties=""text;""", $adOpenStatic, $adLockOptimistic, $adCmdText )^ ERROR |
support23, достаточно переименовать «auth_users.log» в «auth_users.txt».
|
Все отлично работает, благодарю за решение !
|
support23,
Мой вариант. Код:
#include <Array.au3> |
Спасибо, тоже отличное решение, особенно с учетом бонуса)
|
support23, если нужен такой же «бонус» в приведённом мною коде, замените:
Код:
$oRecordSet.Open( _ Код:
$oRecordSet.Open( _ |
Цитата:
В обоих случаях получил функционал больше чем запрашивал изначально, Iska и madmasles вы очень помогли! |
support23, посмотри мою Compare strings. Там есть в комбо - "Подсчёт уникальных строк", а в исходниках есть функция. Естественно даты нужно обрезать. Если используя рег.выр., то упрощённо обрезать указанное количество символов в начале каждой строки. Если нет так часто приходится делать, то в Notepad++ можно обрезать выделив столбиком, а оставшийся список обработать в "Compare strings".
|
Время: 20:34. |
Время: 20:34.
© OSzone.net 2001-