Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Поиск в файле строк и запись их в другой файл

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Alex2019
Отправлено: 06 Сентября, 2019 - 17:51:06
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2019  


Помог: 0 раз(а)




Доброго времени всем!

Ребят, помогите разобраться как реализовать. Я новичек и для меня это сложное задание. Пол дня просидел с книгами и искал по форумам, и мануалам.
Форум обыскал, не нашел похожего.

Есть входной файл с логами: log.txt

В нем записаны разные события.
Нужно найти события alert1 и записать их в другой файл.

Файл имеет такую структуру:



alert1
рандомный текст
рандомный текст
рандомный текст


alert2
рандомный текст
рандомный текст
рандомный текст


alert1
рандомный текст
рандомный текст
рандомный текст
рандомный текст
рандомный текст
рандомный текст

Количество строк в alert1 может быть любое. разделителем между последним "рандомный текст" и следующим блоком инфы служат 3 переноса строки (CRLF CRLF CRLF)
Нужно выбрать все alert1 начиная со слова alert1 и заканчивая тремя CRLF, и записать их в log_result.txt

alert1 событий в файле может быть и 100 и 1000.

Сделал чтение файла, основная проблема с составлением правильного регулярного выражения и записью в другой файл.
Буду очень благодарен за помощь! Заранее спасибо!
Готов учиться на ваших примерах.
 
 Top
LIME
Отправлено: 06 Сентября, 2019 - 19:44:04
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Не надо регулярное выражение. Читай построчно.
https://www.php.net/manual/ru/function.fgets.php
Если alert1 то переводи в состояние записи. То есть какойто флаг себе выставь. И значит все следующие строки пишем пока не попадется пустая. Тогда проверяем что еще 2 дальше есть и снимаем флаг.
Можно в буфер накапливать и писать при снятии флага. Так запись получится быстрее если на hdd
 
 Top
Alex2019
Отправлено: 06 Сентября, 2019 - 19:55:09
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Сент. 2019  


Помог: 0 раз(а)




https://pastebin[dot]com/xn3M1s5L

Вот такой формат log-файла
(Добавление)
[quote=LIME][/quote]
Спасибо. попробую!
(Добавление)
Всем спасибо! Вопрос решен!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB