|
|
|
| Всем привет. Помогите составить выражение которое приведет текст к нормальному виду. Вручную обработать 35 000 записей нереально, нужно автоматизировать.
Текст в базе:
Соответствие модели авто: ВАЗ 2121 "Нива"
Технические характеристики
• Номенклатурный номер П910Ш0SB1015000
• Условное обозначение 2121-3101015-02
• Посадочный диаметр 16
• Рекомендуемая шина 6.95-16 175/80R16
• Диаметр центрального отверстия D1, мм 98
• Диаметр расположения крепежных отверстий D2, мм 139.7
• Диаметр крепежого отверстия d, мм 15
• Тип фаски, град./мм 60°
• Число крепежных отверстий 5
• Вылет ЕТ, мм 58
• Масса, кг 9.100
• Типоразмер 5Jx16
|
Должно получится:
<p>Соответствие модели авто: ВАЗ 2121 "Нива"</p>
<p>Технические характеристики</p>
<ul>
<li>Номенклатурный номер П910Ш0SB1015000</li>
<li>Условное обозначение 2121-3101015-02</li>
<li>Посадочный диаметр 16</li>
<li>Рекомендуемая шина 6.95-16 175/80R16</li>
<li>Диаметр центрального отверстия D1, мм 98</li>
<li>Диаметр расположения крепежных отверстий D2, мм 139.7</li>
<li>Диаметр крепежого отверстия d, мм 15</li>
<li>Тип фаски, град./мм 60°</li>
<li>Число крепежных отверстий 5</li>
<li>Вылет ЕТ, мм 58</li>
<li>Масса, кг 9.100</li>
<li>Типоразмер 5Jx16</li>
</ul>
|
Спасибо. | |
|
|
|
|
|
|
|
для: TetRiska
(10.09.2013 в 22:35)
| | Весь этот текст в базе храниться в одном поле разделенном переводом строки, или же каждая строка в своем поле?
Для первого случая (без учета параграфов, если их всегда два, то просто до формирования списка вычесть из массива первых два элемента и обрамить в параграфы):
<ul><li><?=implode('</li><li>', explode("\r\n", $text))?></li></ul>
|
Тоже самое и для второго случая, но уже для готового массива (выбранного ряда). | |
|
|
|
|
|
|
|
для: confirm
(11.09.2013 в 03:48)
| | Да в одном поле. Параграфов может быть сколько угодно. Мне убрать еще те точки непонятные нужно. | |
|
|
|
|
|
|
|
для: TetRiska
(11.09.2013 в 11:21)
| | Если параграфов сколько угодно, то как-то надо определиться что помещать в параграфы, а что в список. Убрать непонятную точку можно обычным str_replace.
А вообще-то нет, лучше по этим точкам и разбить на массив. Потом извлечь первый элемент массива array_shift, разбить его по переводу строки и обрамить параграфами. Надо полагать, что все что с точки начинается это и надо помещать в список? К оставшимся элементам массива trim, ну а далее объединить в список. | |
|
|
|
|
|
|
|
для: confirm
(11.09.2013 в 11:29)
| | Да, все что с точки нужно в список. А как быть с параграфами тогда - первые 2 строки. | |
|
|
|
|
|
|
|
для: TetRiska
(11.09.2013 в 13:21)
| | Ну все же просто (пишу с промежуточным выводом чтобы было видно данные на этапах):
<?
$s = 'Соответствие модели авто: ВАЗ 2121 "Нива"
Технические характеристики
• Номенклатурный номер П910Ш0SB1015000
• Условное обозначение 2121-3101015-02
• Посадочный диаметр 16
• Рекомендуемая шина 6.95-16 175/80R16
• Диаметр центрального отверстия D1, мм 98
• Диаметр расположения крепежных отверстий D2, мм 139.7
• Диаметр крепежого отверстия d, мм 15
• Тип фаски, град./мм 60°
• Число крепежных отверстий 5
• Вылет ЕТ, мм 58
• Масса, кг 9.100
• Типоразмер 5Jx16';
$s = array_map('trim', explode('•', $s));
echo '<pre>';
print_r($s);
$p = '<p>'.implode('</p><p>', array_map('trim', explode("\r\n", array_shift($s)))).'</p>';
print_r($s);
echo '</pre>';
echo $p.'<ul><li>'.implode('</li><li>', $s).'</li></ul>';
|
| |
|
|
|
|
|
|
|
для: confirm
(11.09.2013 в 14:21)
| | я думал будет больше кода :) спасибо
единое, что скрипт не сделал - не взял в тег абзаца "Технические характеристики", в примере идет отдельной строкой, т.е. должно быть 2 абзаца, можете исправить? | |
|
|
|
|
|
|
|
для: TetRiska
(11.09.2013 в 16:39)
| | Почему не берет, вот результат:
<p>Соответствие модели авто: ВАЗ 2121 "Нива"</p><p></p><p>Технические характеристики</p>
И лишний параграф, это потому, что переводов строк не одна, а значит после разбиения на массив по переводу строки, нужно очистить массив от пустых элементов. | |
|
|
|
|
|
|
|
для: confirm
(11.09.2013 в 18:14)
| | У меня вывело так:
<p>Соответствие модели авто: ВАЗ 2121 "Нива"
Технические характеристики</p><ul><li>Номенклатурный номер П910Ш0SB1015000</li><li>Условное обозначение 2121-3101015-02</li><li>Посадочный диаметр 16</li><li>Рекомендуемая шина 6.95-16 175/80R16</li><li>Диаметр центрального отверстия D1, мм 98</li><li>Диаметр расположения крепежных отверстий D2, мм 139.7</li><li>Диаметр крепежого отверстия d, мм 15</li><li>Тип фаски, град./мм 60°</li><li>Число крепежных отверстий 5</li><li>Вылет ЕТ, мм 58</li><li>Масса, кг 9.100</li><li>Типоразмер 5Jx16</li></ul>
|
| |
|
|
|
|
|
|
|
для: TetRiska
(11.09.2013 в 20:51)
| | Значит ваш текст имеет код перехода на строку не Win (\r\n), а Unix. Замените для explode "\r\n" на "\n", и добавьте удаление пустых элементов массива. | |
|
|
|
|
|
|
|
для: confirm
(11.09.2013 в 21:21)
| | да, точно Unix, сделал так:
$p = '<p>'.implode('</p><p>',
array_filter(array_map('trim', explode("\n",
array_shift($s))))).'</p>';
|
array_filter годится для очистки от пустых элементов?
вышло так:
<p>Соответствие модели авто: ВАЗ 2121 "Нива"</p><p>Технические характеристики</p><ul><li>Номенклатурный номер П910Ш0SB1015000</li><li>Условное обозначение 2121-3101015-02</li><li>Посадочный диаметр 16</li><li>Рекомендуемая шина 6.95-16 175/80R16</li><li>Диаметр центрального отверстия D1, мм 98</li><li>Диаметр расположения крепежных отверстий D2, мм 139.7</li><li>Диаметр крепежого отверстия d, мм 15</li><li>Тип фаски, град./мм 60°</li><li>Число крепежных отверстий 5</li><li>Вылет ЕТ, мм 58</li><li>Масса, кг 9.100</li><li>Типоразмер 5Jx16</li></ul> | |
|
|
|
|
|
|
|
для: TetRiska
(11.09.2013 в 23:29)
| | Можно и array_filter, но проще вычесть из массива пустые элементы функцией array_diff. | |
|
|
|
|
|
|
|
для: confirm
(11.09.2013 в 23:32)
| | как то так?
$p = '<p>'.implode('</p><p>',
array_diff(array_map('trim', explode("\n",
array_shift($s))), array( '' ))).'</p>';
|
| |
|
|
|
|
|
|
|
для: TetRiska
(12.09.2013 в 00:57)
| | Да. | |
|
|
|
|
|
|
|
для: confirm
(12.09.2013 в 00:58)
| | спасибо за помощь и советы, на работе попробую прогнать пару сотен строк с просмотром на экране, может еще что-то всплывет, а то черт знает что писалось в эту базу ранее :( | |
|
|
|
|
|
|
|
для: confirm
(12.09.2013 в 00:58)
| | появилось время на разбор этого примера, никак не получается обработать небольшой текст там, где есть уже хтмл теги:
<p>Основні переваги • Надійність та довговічність; • Використання новітніх технологій; • Висока продуктивність при низьких експлуатаційних витратах; • Моделі серії 2Y6x8B, 2Y6x8D, 2Y8x10B, 2Y8x10D, є двоколісним статичним дорожнім котком з механічним приводом; • Моделі LGS1822B, LGU2124, LGU1822, є трехвальцевими статичними дорожніми котками з повногідравлічним приводом.</p>
<p>Дана серія <strong>котків</strong> комплектується двигунами <u>Ricardo</u> (Великобританія) зробленими за ліцензією. Двигуни виробляються із застосуванням сучасних технологій та з гарантією сертифікації якості продукції; Простора і зручна кабіна оператора комплектується системою провітрювання і кондиціонування повітря (на замовлення);</p>
<p><strong><u>Технiчнi характеристики катка YTO:</u></strong></p>
<ul>
<li>Модель LGS1822B LGU2124 LGU182 2Y6x8B 2Y6x8D 2Y8x10B 2Y8x10D</li>
<li>Максимальна робоча вага, кг 22000 24000 22000 8000 8000 10000 10000</li>
<li>Мінімальна робоча вага, н/см 18000 21000 18000 6000 6000 8000 8000</li>
<li>Статичне лінійне навантаження (задній валець), н/см 920/1100 1010/1200 920/1100 295/410 295/410 410/500 410/500</li>
<li>Статичне лінійне навантаження (передній валець), н/см 400/500 450/540 400/500 177/237 177/237 230/310 230/310</li>
<li>Швидкість руху, км/год 9.6 9.6 9.6 4 4 4 4</li>
<li>Здатність долати підйом, % 20 20 20 20 20 20 20</li>
<li>Радіус розвороту, мм 6640 6780 6780 6500 6500 6500 6500</li>
<li>Колісна база, мм 3330 3350 3350 3150 3150 3150 3150</li>
<li>Дорожній просвіт, мм 473 425 425 320 320 320 320</li>
<li>Тип двигуна Дизель</li>
<li>Модель двигуна LRC6105 LRC6105 LRC6105 495AY 4BT3.9-C80 495AY 4BT3.9-C80</li>
<li>Потужність двигуна, kW/(к.с) 90 (122) 90 (122) 90 (122) 36.75 (50) 60(82) 36.75 (50) 60(82)</li>
<li>Загальні габарити (ДхШхВ), мм 6200x 2300x 2995 5724x 2300x 3079 5724x 2300x 3079 4500x 1580x 2660 4500x 1580x 2660 4500x 1580x 2660 4500x 1580x 2660</li>
</ul>[/code]
на выходе должно получится:
[code]<p>Основні переваги</p>
<ul>
<li>Надійність та довговічність;</li>
<li>Використання новітніх технологій;</li>
<li>Висока продуктивність при низьких експлуатаційних витратах;</li>
<li>Моделі серії 2Y6x8B, 2Y6x8D, 2Y8x10B, 2Y8x10D, є двоколісним статичним дорожнім котком з механічним приводом;</li>
<li>Моделі LGS1822B, LGU2124, LGU1822, є трехвальцевими статичними дорожніми котками з повногідравлічним приводом.</li>
</ul>
<p>Дана серія <strong>котків</strong> комплектується двигунами <u>Ricardo</u> (Великобританія) зробленими за ліцензією. Двигуни виробляються із застосуванням сучасних технологій та з гарантією сертифікації якості продукції. Простора і зручна кабіна оператора комплектується системою провітрювання і кондиціонування повітря (на замовлення).</p>
<p><strong><u>Технiчнi характеристики катка YTO:</u></strong></p>
<ul>
<li>Модель LGS1822B LGU2124 LGU182 2Y6x8B 2Y6x8D 2Y8x10B 2Y8x10D</li>
<li>Максимальна робоча вага, кг 22000 24000 22000 8000 8000 10000 10000</li>
<li>Мінімальна робоча вага, н/см 18000 21000 18000 6000 6000 8000 8000</li>
<li>Статичне лінійне навантаження (задній валець), н/см 920/1100 1010/1200 920/1100 295/410 295/410 410/500 410/500</li>
<li>Статичне лінійне навантаження (передній валець), н/см 400/500 450/540 400/500 177/237 177/237 230/310 230/310</li>
<li>Швидкість руху, км/год 9.6 9.6 9.6 4 4 4 4</li>
<li>Здатність долати підйом, % 20 20 20 20 20 20 20</li>
<li>Радіус розвороту, мм 6640 6780 6780 6500 6500 6500 6500</li>
<li>Колісна база, мм 3330 3350 3350 3150 3150 3150 3150</li>
<li>Дорожній просвіт, мм 473 425 425 320 320 320 320</li>
<li>Тип двигуна Дизель</li>
<li>Модель двигуна LRC6105 LRC6105 LRC6105 495AY 4BT3.9-C80 495AY 4BT3.9-C80</li>
<li>Потужність двигуна, kW/(к.с) 90 (122) 90 (122) 90 (122) 36.75 (50) 60(82) 36.75 (50) 60(82)</li>
<li>Загальні габарити (ДхШхВ), мм 6200x 2300x 2995 5724x 2300x 3079 5724x 2300x 3079 4500x 1580x 2660 4500x 1580x 2660 4500x 1580x 2660 4500x 1580x 2660</li>
</ul>
и скажите мне, такое вообще возможно скриптом обработать или вручную? :( вручную придется пару десятков тыс. пройти тогда, что нереально | |
|
|
|
|
|
|
|
для: TetRiska
(30.09.2013 в 17:08)
| |
<?
$str = explode('</p>', $str, 2);
$str[0] = explode('•', $str[0]);
$str = array_shift($str[0]).'</p><ul><li>'.implode('</li><li>', $str[0]).'</li></ul>'.$str[1];
|
| |
|
|
|
|