Вот полный текст записи(переносы сохранены - в 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
Назначение цифр пока что мне не понятно, можно пропустить их.
Подскажите плз как это можно сделать? с чего нуно начать?
Считывать построчно в функции или как то все таки проще заюзать класс?
Спустя 2 часа, 3 минуты, 43 секунды (14.05.2012 - 21:50) sergeiss написал(а):
Цитата (greenfoxx @ 14.05.2012 - 19:46) |
Подскажите плз как это можно сделать? с чего нуно начать? |
Начать нужно с того, что понять алгоритм :) Каким образом ты его потом реализуешь, это уже "дело десятое". Самое главное в том, что алгоритм должен быть правильным. Ты САМ опиши алгоритм, а мы тебе подскажем, как это на ПХП реализовать (какие функции и т.д.).
Вот берешь ты первую строку
###SECTION_1###1###3###TITLE_BLOCK_1
по какому признаку ты выделишь нужную часть?
И так далее, по каждой строке: по каким признакам выделяется нужная тебе часть данных?
Далее.
Цитата (greenfoxx @ 14.05.2012 - 19:46) |
Считывать построчно в функции или как то все таки проще заюзать класс? |
Ты сам-то понял, что хотел спросить в этом вопросе?
Спустя 36 минут, 37 секунд (14.05.2012 - 22:27) XCross написал(а):
Да просто студенту лень читать, он решил, что мы тут за него напишем все.
Спустя 13 минут, 56 секунд (14.05.2012 - 22:41) greenfoxx написал(а):
Ну во первых не студент. А во вторых я не прошу за меня писать код, а только теоретически спрашиваю с чего начать.
А вот реальным студентам можно было и промолчать и не показывать тут свое остроумие.
А вот реальным студентам можно было и промолчать и не показывать тут свое остроумие.
Спустя 17 минут, 29 секунд (14.05.2012 - 22:58) sergeiss написал(а):
Цитата (greenfoxx @ 14.05.2012 - 22:41) |
А во вторых я не прошу за меня писать код, а только теоретически спрашиваю с чего начать. |
Ты думаешь, я просто так, "от нечего делать" задал тебе вопросы? Или для того, чтобы ответить на твои вопросы? Если тебе на самом деле нужна помощь, то "будь любезен", работай в режиме диалога.
XCross - ты не прав. В первую очередь по форме высказывания. А еще потому, что это был флуд в тематическом разделе, нарушение п.2.2 Правил Форума. Для начала - устное предупреждение.
Спустя 55 минут, 23 секунды (14.05.2012 - 23:53) Игорь_Vasinsky написал(а):
во вторых - это дубль темы. оригинал в PHP для начинающих. и там почему то ТС всё знает и у него задача написать класс для парсинга этого текста.
Спустя 4 минуты, 49 секунд (14.05.2012 - 23:58) greenfoxx написал(а):
Да, сори за дубль. пока что не скумекаю как на классы переделать можно. в ООП не силен пока что. плиз хелп
Спустя 5 минут, 18 секунд (15.05.2012 - 00:04) Игорь_Vasinsky написал(а):
ты уверен что тебе именно ООП нужен? может процедурным обойтись?
Спустя 12 минут, 39 секунд (15.05.2012 - 00:16) greenfoxx написал(а):
процедурный у меня уже почти реализован. интересен вариант на ООП
Спустя 5 минут, 29 секунд (15.05.2012 - 00:22) Игорь_Vasinsky написал(а):
ну чтож. потихоньку дели на функции по этапам, определяй аргументы.
потом в класс..или классы.
потом в класс..или классы.
Спустя 5 часов, 22 минуты, 26 секунд (15.05.2012 - 05:44) olgatcpip написал(а):
Цитата |
процедурный у меня уже почти реализован. интересен вариант на ООП |
От чего же ты не покажешь решение на процедурке.. решать лично мне задачку лень, а вот превратить в ООП из готового - это я бы сделала... Если бы было уже, я бы щас накатала бы, так как щас есть минутка, но потом может и не быть...
Чуешь к чему я? Не скрывай решения. Показывай и все
Спустя 2 часа, 46 минут, 44 секунды (15.05.2012 - 08:31) Игорь_Vasinsky написал(а):
за одно и может оптимизируем вместе.
Спустя 4 часа, 28 минут, 1 секунда (15.05.2012 - 12:59) greenfoxx написал(а):
Да, вот процедурное решение, которое в массиве все хранит. дальше в принципе дальше могу сам уже из массива выбрать. Нуно на ООП перевести.
Тут важный момент:
2. Расположение секций может быть следовать по разному(друг за другом или разбросано) НО название их одинаковое везде во всех записях базы. Но уже вывод данных идет строго в определенной последовательности.
Поэтому я сразу эту последовательность в массиве задал:
global $array;
$array = array('#SECTION_1#', '#SECTION_2#', '#SECTION_3#', '#SECTION_4#');
$result = parse($a);
print_r($result);
function parse($a) {
global $array;
$a = explode("\r\n", $a);
$i = 0;
$sec = 0;
foreach ($a as $val) {
foreach ($array as $item) {
if (strpos($val, $item) !== false) {
$i = 0;
$sec++;
$inf = explode("###", $val);
$out[$sec] = array(
"section" => $inf[1],
"cols" => $inf[2],
"rows" => $inf[3],
"title" => $inf[4]
);
continue;
}
}
$out[$sec]["table"][$i] = explode("###", $val);
$i++;
}
return $out;
}
Тут важный момент:
2. Расположение секций может быть следовать по разному(друг за другом или разбросано) НО название их одинаковое везде во всех записях базы. Но уже вывод данных идет строго в определенной последовательности.
Поэтому я сразу эту последовательность в массиве задал:
$array = array('#SECTION_1#', '#SECTION_2#', '#SECTION_3#', '#SECTION_4#');