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]   

> Описание: Помогите плз с парсингом темы.
greenfoxx
Отправлено: 14 Мая, 2012 - 19:02:23
Post Id


Новичок


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


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




Привет коллеги. Столкнулся с интересной задачей парсинга текста из базы данных.
Вот полный текст записи(переносы сохранены - в sql файле это '\r\n'):

###SECTION_1###1###3###TITLE_BLOCK_1
text_1
text_2
text_3
###SECTION_2###2###2###TITLE_BLOCK_2
column_1###column_2
text_1###120
text_2###130

А вот как в итоге должно быть после парсинга и вывода:

TITLE_BLOCK_1
text_1
text_2
text_3

TITLE_BLOCK_2
+----------+----------+
| column_1 | column_2 |
+----------+----------+
| text_1 | 120 |
| text_2 | 130 |
+----------+----------+


Понимаю, что конечный результат можно уже вывести с помощью php. Но вот как распарсить такой текст пока что затрудняюсь.
В задаче нужно задействовать класс(желательно) или функцию без использования каких-то фреймворков.
1. Текст, название блоков, название колонок может быть разный и сколько угодно.
2. Расположение секций может быть следовать по разному(друг за другом или разбросано) НО название их одинаковое везде во всех записях базы.
Тоесть, например SECTION_1 = Links, а SECTION_2 = Hotels

Назначение цифр пока что мне не понятно, можно пропустить их.

Подскажите плз как это можно сделать? с чего нуно начать?
Считывать построчно в функции или как то все таки проще заюзать класс?
 
 Top
Alho
Отправлено: 14 Мая, 2012 - 20:23:56
Post Id



Посетитель


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


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




Почти уверен, что можно сделать проще, но... может разберетесь и улучшите Подмигивание

PHP:
скопировать код в буфер обмена
  1. function parse($a)
  2. {
  3.         $a=explode("\r\n", $a);
  4.         $i=0;
  5.         $sec=0;
  6.         foreach($a as $val)
  7.         {      
  8.                 if(strpos($val, "SECTION")!==False)
  9.                 {
  10.                         $i=0;
  11.                         $sec++;
  12.                         $inf=explode("###", $val);
  13.                         $out[$sec]=array(
  14.                                                 "section"=>$inf[1],
  15.                                                 "cols"=>$inf[2],
  16.                                                 "rows"=>$inf[3],
  17.                                                 "title"=>$inf[4]
  18.                         );
  19.                         continue;
  20.                 }
  21.                 $out[$sec]["table"][$i]=explode("###", $val);
  22.                 $i++;
  23.  
  24.         }
  25.         return $out;
  26. }


А еще можно, если отфильтровать лишние # и числа, то очень успешно его читать будет fgetcsv
 
 Top
sKaa
Отправлено: 14 Мая, 2012 - 21:10:30
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


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

[+]


Я конечно не претендую на оригинальность но функция strtr вполне справится если нужные слова запихнуть в массив и скормить ей :
PHP:
скопировать код в буфер обмена
  1. $trans = array("hello" => "hi", "hi" => "hello");
  2. echo strtr("hi all, I said hello", $trans);
  3. // hello all, I said hi
 
 Top
greenfoxx
Отправлено: 14 Мая, 2012 - 23:31:14
Post Id


Новичок


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


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




Alho, спс. Идею понял, дальше продолжаю самостоятельно.
 
 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