Что нового

Излечение в мультистроковой конструкции строк содержащих искомые слова

Rjevsky

Новичок
Сообщения
102
Репутация
4
Есть большой лог файл представляющий из себя конструкцию ниже:
[01/May/2013 09:04:25] 192.168.101.22 - "Загрузка Connectify 3.0.0.20932" http://www.hosoft.ru/download/program/connectify-3.0.0.20932
[01/May/2013 08:55:41] 192.168.101.2 [email protected] "Раздаем WIFI без роутера (программа Connectify) | Всё об iPad" http://ipadstory.ru/razdaem-wifi-bez-routera-programma-connectify.html
[01/May/2013 08:55:56] 192.168.101.3 [email protected] "Обсуждение программы MyPublicWiFi - MyDiv" http://soft.mydiv.net/win/comments-MyPublicWiFi.html
[01/May/2013 08:56:31] 192.168.101.27 - "Connectify - Turn your PC into a Wi-Fi Hotspot and Get Faster Internet" http://www.connectify.me/

Допустим мы его уже считали в переменную, теперь нужно :
1. Извлечь из него в переменную строки в виде
Код:
$string1 & @CRLF & $string2 & @CRLF
(как в исходной конструкции) содержащие искомые слова, например "192.168.101.2 |connectify.me|mydiv.net"
2. Извлечь оставшиеся строки в другую переменную
При этом важно не нарушать последовательность строк, в соответствии с датой и временем в начале.

Я это делал с помощью
Код:
StringInStr
построчно в цикле
Код:
FileReadLine
, что могло выполняться около часа. Можно ли както ускориться?
 

edyapd

Осваивающий
Сообщения
380
Репутация
30
Чтобы помочь вам с регулярными выражениями, требуется знать точно, что должно быть на выходе. К примеру можете привести выходные строки, для четырех приведённых вами входных строк.
По той конструкции, что у вас сейчас есть, можно ускорить если вместно записи сразу в файл, записать сперва в переменную. А уже по окончании записать её целиком в файл.
 

C2H5OH

AutoIT Гуру
Сообщения
1,473
Репутация
333
Не совсем идеальный вариант, конечно.
Если время работы по прежнему будет неприемлемо, то отпишись тут. Можно попробовать сделать одну регулярку и не делать склеивание строк массива (но не думаю что это даст большое ускорение).
Код:
#include 'array.au3'

$Text = '[01/May/2013 09:04:25] 192.168.101.22 - "Загрузка Connectify 3.0.0.20932" http://www.hosoft.ru/download/program/connectify-3.0.0.20932' & @CRLF & _
'[01/May/2013 08:55:41] 192.168.101.2 [email protected] "Раздаем WIFI без роутера (программа Connectify) | Всё об iPad" http://ipadstory.ru/razdaem-wifi-bez-routera-programma-connectify.html' & @CRLF & _
'[01/May/2013 08:55:56] 192.168.101.3 [email protected] "Обсуждение программы MyPublicWiFi - MyDiv" http://soft.mydiv.net/win/comments-MyPublicWiFi.html' & @CRLF & _
'[01/May/2013 08:56:31] 192.168.101.27 - "Connectify - Turn your PC into a Wi-Fi Hotspot and Get Faster Internet" http://www.connectify.me/'

$pattern = '(?m)(?(DEFINE)(^.*?((?:192\.168\.101\.2\s)|(?:connectify\.me)|(?:mydiv\.net)).*?$))(?1)'

$aStr=StringRegExp($Text, $pattern, 3)
_ArrayDisplay($aStr)
$str = ""
For $i=0 To UBound($aStr)-1
	$str &= $aStr[$i] & @CRLF
Next
MsgBox(0,"Совпадения",$str)

$rest = StringRegExpReplace($Text, $pattern, "")
MsgBox(0,"Остаток",$rest)
 
Автор
R

Rjevsky

Новичок
Сообщения
102
Репутация
4
C2H5OH, работает достаточно шустро. Протестирую более досконально ещё, но уже очевидно, что работать будет на порядок быстрей.
Из недостатка - в остатках присутствуют пустые строки. :'(

Ещё проблема - полученные простыни в переменных не сохраняются в файл FileWrite...



Добавлено:
Сообщение автоматически объединено:

edyapd, для 1. надо получить на выходе
[01/May/2013 08:55:41] 192.168.101.2 [email protected] "Раздаем WIFI без роутера (программа Connectify) | Всё об iPad" http://ipadstory.ru/razdaem-wifi-bez-routera-programma-connectify.html
[01/May/2013 08:55:56] 192.168.101.3 [email protected] "Обсуждение программы MyPublicWiFi - MyDiv" http://soft.mydiv.net/win/comments-MyPublicWiFi.html
[01/May/2013 08:56:31] 192.168.101.27 - "Connectify - Turn your PC into a Wi-Fi Hotspot and Get Faster Internet" http://www.connectify.me/

для 2
[01/May/2013 09:04:25] 192.168.101.22 - "Загрузка Connectify 3.0.0.20932" http://www.hosoft.ru/download/program/connectify-3.0.0.20932
 
Верх