Master_Sergius
Ноя. 17, 2013 16:51:42
Здравствуйте! В чём фокус - надо найти по регулярке часть текста в разных файлах. Проблема начинается, когда файл очень большой, например от 2 гб и выше. Поэтому помещать в оперативу не идёт. Читать построчно - тоже не идёт, ибо регулярки всякие бывают - может быть такой шаблон, что совпадёт кусок, который состоит из 50 строк, а то и более… Использовать grep хотелось бы, но этот скрипт должен работать и под виндой… Посмотрел исходники грепа, и алогритмы и прифигел немножко - вряд ли такое смогу запрогать )
В общем, подскажите, кто что может, буду премного благодарен.
JOHN_16
Ноя. 17, 2013 22:57:19
вот сходу подумал о том что бы читать порциями и реализовывать “перектытие”, если что то отсекать повторяющиеся результаты регулярок…ну это так, в порядке бреда мыслей…
py.user.next
Ноя. 18, 2013 05:43:19
Master_Sergius
надо найти по регулярке часть текста в разных файлах
конкретный пример приведи
пока неясно, почему ты выбрал именно регулярные выражения
o7412369815963
Ноя. 18, 2013 08:10:39
попробовать сделать LazyString (авто подгрузка) или заюзать grep
Master_Sergius
Ноя. 18, 2013 12:06:22
Насчёт примера, кратко изложу суть задачи.
Есть много разных програм, которые постоянно пишут в логи что-то… Ежедневно надо проверять эти логи на наличие разных кусков текста. И вот когда есть такие куски как
(а цифры могут быть разные), или “INFO: что-то + айпишник” или “ERROR: что-то + айпишник”, ну и так далее. Иногда, эти куски могут занимать несколько строк. Вот такая беда…
Вариант насчёт считывания порций - интересен… А что если кто-то всунет регулярку, которая покрывает весь файл? что-то а-ля (\s|\S)*
Budulianin
Ноя. 18, 2013 12:48:24
Master_Sergius
(а цифры могут быть разные), или “INFO: что-то + айпишник” или “ERROR: что-то + айпишник”, ну и так далее.
Файл весь покажи, если очень большой, то кусок давай. Понятнее станет, что нужно.
FishHook
Ноя. 18, 2013 12:50:38
А что если Вам задуматься не над программой, которая парсит готовый лог, а замутить нечто такое, что этот лог заменяет? То есть теоретически Вы же можете направить вывод лога не в файл, а в программу? А программа, получая небольшие порции данных пусть их парсит каким-то методом в зависимости от того, откуда эти данные пришли.
Master_Sergius
Ноя. 18, 2013 13:06:25
Ну как так файл показать, это ж должно быть универсальное решение. Уточню суть задачи. Есть разные проги (чужие) и есть конкретные тесты (тоже чужие). То есть, грубо говоря, задача в целом - автоматическое тестирование программ. И вот парсить надо именно готовые логи. При этом, что для каждой проги разные куски искать, естественно все всегда искали регулярками. Только делали всё через греп, который вызывали через subprocess, а теперь появились и виндовые проги, и хотели тестить тем же модулем, но греп уже не идёт…
Budulianin
Ноя. 18, 2013 13:23:07
Master_Sergius
а теперь появились и виндовые проги, и хотели тестить тем же модулем, но греп уже не идёт…
C:\>cat 1.txt | grep -E xml
<?xml version="1.0" encoding="windows-1251"?><BSDocument><TARIFFS><RECORD><Tarif
fGUID>1</TariffGUID>
Master_Sergius
Ноя. 18, 2013 13:31:06
Budulianin
C:\>cat 1.txt | grep -E xml
Что за чит? С линукса монтировать виндовый раздел? Это плохой вариант…