powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Распарсить текстовый файл и сформировать HTML на его основе
23 сообщений из 23, страница 1 из 1
Распарсить текстовый файл и сформировать HTML на его основе
    #38639357
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!
Направьте, пожалуйста, на путь истинный в решении такой вот задачки.

Есть текстовый файл.
Необходимо его преобразовать в правильный html код.
Т.е. все ссылки и email'ы привести к html записи, если перед строкой есть пустая строка, значит это начало параграфа... соответственно, если пустая строка после текста, то это конец параграфа, если параграф заканчивается знаками "-" или "=", то этот параграф должен быть заголовком первого уровня. Если параграф начинается с числа, то он должен стать заголовком уровня равному этому числу. А если параграф начинается со звездочки, то это немаркированный список.

Помогите пожалуйста.
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639360
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Excubitor,

читайте файл(fread), ищите то что вам нужно(nl2br(),preg_replace()) и преобразовывайте в html сущности и теги.
в чем конретно проблема?
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639363
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u,
Ну тем, что, к сожалению, не все так просто...
Например строка:

Векторный резонатор: гипотеза и теории
======================================


должна стать: <h1>Векторный резонатор: гипотеза и теории</h1>

или:

## Погранслой искажает вихрь по мере распространения сигнала

должна стать: <h2>Погранслой искажает вихрь по мере распространения сигнала</h2>

Чем тут preg_replace() может помочь?

Пока что я из заданного могу только открыть файл ((
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639366
FatalPHPError
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как-то так
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
<?php
$str = <<<EOT
Векторный резонатор: гипотеза и теории
======================================
## Погранслой искажает вихрь по мере распространения сигнала
EOT;
$str = preg_replace ('/(.*?)\n=+/m', '<h1>\1</h1>', $str);
$str = preg_replace ('/^##\s*(.*)/m', '<h2>\1</h2>', $str);
echo $str;


Результат:
Код: sql
1.
2.
<h1>Векторный резонатор: гипотеза и теории</h1>
<h2>Погранслой искажает вихрь по мере распространения сигнала</h2>
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639368
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FatalPHPError,
Огромное спасибо вам! Если вам не сложно расскажите, пожалуйста, что значат регулярки /(.*?)\n=+/m и /^##\s*(.*)/m
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639372
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А используя preg_replace() возможно решить остальные части задачи? Например

http://ya.ru Резонатор вращает ультрафиолетовый лазер

Должна стать: <a href=" http://ya.ru">Резонатор</a>

А вот это:
Примесь, как бы это ни казалось парадоксальным, сингулярно возбуждает
экситон, при этом дефект массы не образуется.

Гидродинамический удар квантуем. Взвесь пространственно ускоряет кварк - все дальнейшее далеко выходит за
рамки текущего исследования и не будет здесь рассматриваться.

должно стать:
<p>Примесь, как бы это ни казалось парадоксальным, сингулярно возбуждает
экситон, при этом дефект массы не образуется.</p>

<p>Гидродинамический удар квантуем. Взвесь пространственно ускоряет кварк - все дальнейшее далеко выходит за рамки текущего исследования и не будет здесь рассматриваться.</p>
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639394
FatalPHPError
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например

http://ya.ru Резонатор вращает ультрафиолетовый лазер

Должна стать: <a href=" http://ya.ru">Резонатор</a>

Код: php
1.
$str = preg_replace ('|^(https?://.+?)\s(.+)|m', '<a href="\1">\2</a>', $str);
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639424
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FatalPHPError, Обалдеть... Спасибо! С удовольствием поставил бы вам пива )
Блин, как такие забубенные регулярки читать? Я привык то к простым, а сейчас пытаюсь разобраться в ваших и уже запутался во всех этих квантификаторах...
Ну подскажите пожалуйста, что это регулярное выражение значит? |^(https?://.+?)\s(.+)|m
И быть может, я уже не буду мучить других людей ((
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639572
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Excubitorкак такие забубенные регулярки читать? Тынц. Много букв, но довольно подробно описано.
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639577
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,
Эм... я почти все это прочитал уже... от того, что я теперь понимаю большинство символов в вышестоящих регулярок меняется мало. Как ее составить? Небольшую (достаточную, чтобы пропарсить урл) я и сам могу написать, а вот те что приводятся в этой ветке сложноваты для моего понимания. Мне бы понять как ее составили, чтобы на остальные условия задачи я сам уже писал.
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639630
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Excubitor,

Начните разбор с понимания каждого символа в регулярке.
Excubitorчто это регулярное выражение значит? |^(https?://.+?)\s(.+)|m
Откройте мануал и давайте читать по буквам... :-)

Здесь символ | - ограничитель регулярного выражения. Довольно часто используют слеш, но допустимы и другие символы.
^ - начало строки
Скобки выделяют часть строки, которая будет сохранена в результате и может быть использована позже.
https? - здесь часть строки "http" проверяется как есть, а вопросительный знак указывает, что символ "s" может быть, а может и не быть.
:// - это проверяется как есть
.+ - точка означает "любой символ", а плюс означает "один или более".
\s - любой пробельный символ.

Таким образом, эта часть регулярного выражения возьмет текст строго в начале строки, начинающийся на http:// или https://, за которым идут один или более каких-то символов до ближайшего пробела. Этот фрагмент текста доступен будет в выражении для замены как "\1" (можно прочитать как "первый найденный фрагмент").

После пробела идет (.+) - эта часть выражения возьмет любые один или более символов. Этот фрагмент будет вторым.

Про модификатор m прочтите уж в мануале.
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639646
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,
Вот спасибо огромное ))) Стало сразу все понятнее!

Жизнь стала чуть легче, а сон менее крепким..
Стало легче читать чужое... осталось научиться писать свое.

Если взять часть задачи про параграфы.

авторА вот это:
Примесь, как бы это ни казалось парадоксальным, сингулярно возбуждает
экситон, при этом дефект массы не образуется.

Гидродинамический удар квантуем. Взвесь пространственно ускоряет кварк - все дальнейшее далеко выходит за
рамки текущего исследования и не будет здесь рассматриваться.

должно стать:
<p>Примесь, как бы это ни казалось парадоксальным, сингулярно возбуждает
экситон, при этом дефект массы не образуется.</p>

<p>Гидродинамический удар квантуем. Взвесь пространственно ускоряет кварк - все дальнейшее далеко выходит за рамки текущего исследования и не будет здесь рассматриваться.</p>

регулярка должна получиться что-то вроде:

$f = preg_replace ('/\n.*\n/', '<p>\1</p>', $f);

или может даже:

$f = preg_replace ('/^(\n.*\n)/m', '<p>\1</p>', $f);
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639651
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ExcubitorЕсли взять часть задачи про параграфы.
как только вы сами для себя определите четко что такое параграф - так сразу и регулярку напишите для этого.

у вас - параграф это текст перед которым есть два перевода строки или начало всего текста. так?
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639689
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
r u,

Мда... вы правы...
Так?

Код: php
1.
preg_replace("/^(.+)\n/m", "<p>\1</p>\n", $а);
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38639915
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блин... как то она не так работает ((
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38640092
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде, в первом посте есть определение параграфа:Excubitorесли перед строкой есть пустая строка, значит это начало параграфа... соответственно, если пустая строка после текста, то это конец параграфаТеперь определим, что такое пустая строка. Предположим, что это строка, где нет никаких символов кроме перевода строки. В простейшем случае два перевода строки подряд ("\n\n") будет пустой строкой. Не забываем про виндовый и маковский варианты, если они потенциально могут быть в тексте. Возможно, Вы захотите расширить понятие пустой строки и на строки, состоящие целиком из невидимых символов - пробелов и табуляции.
Таким образом, вероятно, в самом простейшем случае параграф можно распознать/взять приблизительно каким-то таким выражением:
Код: php
1.
|\n\n(.+)\n\n|msU
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38640157
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle,

Я думал насчет такого варианта... не получилось, не помню уже почему.
Все сделал в общем, без вас бы затянулось это на долго-долго.
В принципе, может кому то мои сегодняшние мучения пригодятся, так что выведу, что получилось.

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<html>
	<head>
	<title>Выбрать текстовый файл</title>

	</head>
	<body>
	<form name="test" method="post" action="input1.php">
		<p> <b>Введите название файла:</b><br>
			<input type="text" name="filename" size="40">
		</p>
		<p> <input type="submit" value="Отправить">
			<input type="reset" value="Очистить">
		</p>
	</body>
</html>



Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
	<?php
	
		$strFileName = $_POST["filename"];
		$strFileFullName = $strFileName . '.txt';
		
        $f = file_get_contents($strFileFullName); 
		$contents = $f;

			$contents = preg_replace ('/(.*?)\n=+/m', '<h1>\1</h1>', $contents);//делаем заголовок первого уровня
			$contents = preg_replace ('/(.*?)\n-+/m', '<h1>\1</h1>', $contents);//делаем заголовок первого уровня
			$contents = preg_replace ('/^##\s*(.*)/m', '<h2>\1</h2>', $contents);//делаем заголовок второго уровня
			$contents = preg_replace ('|(https?://.+?)\s(.+?)\s|m', '<a href="\1">\2</a>&nbsp;', $contents);//меняем ссылки
			$contents = preg_replace ('|\.(.+)\@(.+?)\s(.+?)\s|m', '&nbsp;<a href="mailto:\1@\2">\3</a>&nbsp;',$contents);//меняем email
			$contents = preg_replace ("/\n/m", "&nbsp;", $contents);//удаляем переносы строки 
			$contents = preg_replace ("/&nbsp;&nbsp;/m", "\n", $contents);//меняем два пробела на перенос
			$contents = preg_replace ("/^(.+)\n/m", "<p>$1</p>\n", $contents);//устанавливаем параграфы
			$contents = preg_replace ("/\*(.+)\n/m", "<ul>*$1</ul>", $contents);//начинаем список
			$contents = preg_replace ("/\*(.+?)&nbsp;/m", "<li>$1</li>", $contents);//заканчиваем список
			$contents = preg_replace ("/\*(.+)\n/m", "<li>$1</li>", $contents);//заканчиваем список

			
			echo $contents;
		
	?>



конечно косяков хватает, но я, буквально сегодня с регулярными выражениями познакомился, так что извиняйте. Спасибо всем за помощь. Хотя завтра наверное придется до ума доводить... а именно, чтобы работало под любым текстовым документом, а то иногда все таки приколы случаются (
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38640170
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Excubitor,

Думаю, можно чуток соптимизировать код:
http://ru2.php.net/manual/ru/function.preg-replace.php Если и pattern и replacement являются массивами , каждый элемент pattern будет заменен соответствующим элементом из replacement.
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38640202
nscl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понял, пишется скрипт для наведения порядка в старых залежах научных статей, созданных ещё во времена весьма доисторические, в формате *.txt и в старых кодировках.

Применять php имеет смысл в том случае, если вы хотите добавить такой "умный конвертор" к уже существующему веб-сайту. Если же вы планируете массовую обработку - я очень советую посмотреть в сторону написания скрипта для SED или AWK. Те же регулярки, но гораздо большее удобство при массированном применении и обработке файловых хранилищ.

Стопроцентно работать для всех файлов оно не будет - если файл текстовый, и разукрашивался вручную такой вот типа псевдографикой - все случаи не охватите, можно будет лишь снизить объем ручной работы.
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38640214
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkleExcubitor,

Думаю, можно чуток соптимизировать код:
http://ru2.php.net/manual/ru/function.preg-replace.php Если и pattern и replacement являются массивами , каждый элемент pattern будет заменен соответствующим элементом из replacement.

Хах... точно ) Спасибо! Завтра займусь. Ваша помощь неоценима )
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38640218
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nscl,
Спасибо за совет, но нет. Я просто прочитал задание и меня заинтересовало попробовать его сделать. Но если вдруг мне понадобится подобный конвертер - воспользуюсь вашим советом )
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38640459
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как то надо переделать парсер email'a ((
Дело в том, что в таком состоянии

Код: php
1.
$contents = preg_replace ('|\.(.+)\@(.+?)\s(.+?)\s|m', '&nbsp;<a href="mailto:\1@\2">\3</a>&nbsp;',$contents);//меняем email



Он начинает искать майл, если перед ним точка стоит (писал, чтобы проверить на одном файле, соответственно открыв другой, емайла он там не нашел) ((
Пробовал, чтобы он пытался с пробела (использовал и \s, и \040, и  ) все равно начинает парсить откуда-то с другого места, обычно за несколько слов до начала емайла)

Смысл в том, чтобы парсер находил емайл в любой части документа.
Не подскажите, что я упускаю?
...
Рейтинг: 0 / 0
Распарсить текстовый файл и сформировать HTML на его основе
    #38640485
Excubitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ммм... что такое вот должно сработать, наверное:

Код: php
1.
[-\w_]+@[-\w]+\.\w+/i
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Распарсить текстовый файл и сформировать HTML на его основе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]