Использование макросов {prevskip} и {prevget} с изменяемым значением

Тема в разделе "Шаблон вывода", создана пользователем Michel_S_1958, 17 июл 2015.

  1. Michel_S_1958

    Michel_S_1958 New Member Пользователи

    Регистрация:
    8 июн 2015
    Сообщения:
    38
    Продолжаю использовать конструкцию по видео уроку "Парсинг в CSV всех характеристик товара РАЗОМ".
    Столкнулся с задачкой, но не могу сообразить как реализовать с помощью макроса поиск-замена.

    Имеем код web страницы сайта:

    <h3>Основные характеристики</h3>
    <b> Разрешение матрицы </b><td>[12.3 Мпикс]</td>
    <b> Видоискатель </b><td>[зеркальный]</td>
    <b> Дисплей </b><td>[TFT 2.7"" поворотный]</td>
    <h3>Объектив</h3>
    <b> Фокусное расстояние </b><td>[18-55 мм]</td>
    <b> Режимы фокусировки </b><td>[автоматический, ручной]</td>

    Для последующего импорта данных на сайт нужно получить конструкцию файла, в которой заголовки, заключенные в теги <h3>{skip}</h3> прописывались бы перед каждой характеристикой, которая относиться к разделу заголовка. Т.е. нужно получить следующий результат:

    (Основные характеристики) Разрешение матрицы: [12.3 Мпикс];
    (Основные характеристики) Видоискатель: [зеркальный];
    (Основные характеристики) Дисплей: [TFT 2.7"" поворотный];
    (Объектив) Фокусное расстояние: [18-55 мм];
    (Объектив) Режимы фокусировки: [автоматический, ручной];

    Всё, что касается замены частей кода на двоеточия, точек с запятой, включения или исключения переносов и других замен в макросе поиск-замена, это понятно как делать. Вопрос в использовании макросов {skip} , {get}и соответственно {prevskip}, {prevget}.
    Если запоминать значение {skip} при обращении к нему, например, в конструкции <h3>{skip}</h3>, то оно будет принимать значение последнего. В нашем примере "Объектив". И потом при использовании макроса {prevskip} в нужной части кода вместо "Основные характеристики" будет вставляться везде "Объектив". Т.е. получим:

    (Объектив) Разрешение матрицы: [12.3 Мпикс];
    (Объектив) Видоискатель: [зеркальный];
    (Объектив) Дисплей: [TFT 2.7"" поворотный];
    (Объектив) Фокусное расстояние: [18-55 мм];
    (Объектив) Режимы фокусировки: [автоматический, ручной];

    Несколько раз изучил урок по использованию макроса поиск-замена и не смог найти решение.
    Подскажите, пожалуйста, как это реализовать?
     
  2. Kreol

    Kreol Модератор Команда форума Модератор

    Регистрация:
    6 янв 2013
    Сообщения:
    2.666
    Здравствуйте!
    По всей видимости нужно использовать повторяющууся границу и именно там это делать. (а возможно и повторяющююся внутри повторяющейся
     
  3. Root

    Root Администратор Администратор

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Здравствуйте, спасибо! На неделе постараюсь сделать решение.

    С уважением к вам, Сергей.
     
  4. Michel_S_1958

    Michel_S_1958 New Member Пользователи

    Регистрация:
    8 июн 2015
    Сообщения:
    38
    Спасибо. Уже не нужно.
    Сегодня купил у Вас Лицензию максимального функционала. Там удобнее устроено отображение повторяющихся границ парсинга, чем в демо версии. Поэтому, перечитав еще несколько раз справку про повторяющиеся границы парсинга внутри повторяющихся, поэкспериментировал, "врубился" в логику конструкции примера и сам всё сделал. Теперь всё прекрасно работает.

    Ниже привожу схему, по которой реализовал задачу.

    1. Из всего кода страницы Web сайта заданием "обычной границы парсинга 1" выделяю часть кода всех Характеристик, чтобы повторяющиеся границы парсинга ограничить только этой частью кода, а не всей страницы.
    Эта часть кода страницы показана далее:

    <h3>Основные характеристики</h3>
    <table>
    <b> Разрешение матрицы </b><td>[12.3 Мпикс]</td>
    <b> Видоискатель </b><td>[зеркальный]</td>
    <b> Дисплей </b><td>[TFT 2.7"" поворотный]</td>
    </table>
    <h3>Объектив</h3>
    <table>
    <b> Фокусное расстояние </b><td>[18-55 мм]</td>
    <b> Режимы фокусировки </b><td>[автоматический, ручной]</td>
    </table>

    2. Создаю "повторяющуюся границу парсинга 1" в границах <h3...</table>, в настройках которой (справа) указываю, что "работу" её ограничить "обычной границей парсинга 1".
    В результате получаются два блока:

    >Основные характеристики</h3>
    <table>
    <b> Разрешение матрицы </b><td>[12.3 Мпикс]</td>
    <b> Видоискатель </b><td>[зеркальный]</td>
    <b> Дисплей </b><td>[TFT 2.7"" поворотный]</td>

    >Объектив</h3>
    <table>
    <b> Фокусное расстояние </b><td>[18-55 мм]</td>
    <b> Режимы фокусировки </b><td>[автоматический, ручной]</td>
    </table>

    2.1. Там же в настройках "повторяющейся границы парсинга 1" задаю "обычную границу парсинга 2" в границах >...</h3>, которая будет парсить название группы характеристик в каждом цикле, а именно:

    В первом цикле - "Основные характеристики", а
    во втором цикле - "Объектив".

    3. Создаю "повторяющуюся границу парсинга 2" в границах <b.../td>.
    В результате получается пять блоков:

    > Разрешение матрицы </b><td>[12.3 Мпикс]<
    > Видоискатель </b><td>[зеркальный]<
    > Дисплей </b><td>[TFT 2.7"" поворотный]<
    > Фокусное расстояние </b><td>[18-55 мм]<
    > Режимы фокусировки </b><td>[автоматический, ручной]<

    4. Создаю шаблон вывода.

    4.1. Основной макрос парсинга <CD_CYCLE_GRAN_1!>, т.е. во время парсинга "крутим" "повторяющуюся границу парсинга 1"

    4.2. В окне настройки повторяющихся границ указываем:

    Для "повторяющейся границы парсинга 1": [CGRAN2], т.е. в каждом цикле "повторяющейся границы парсинга 1" "крутим" "повторяющуюся границу парсинга 2"
    Для "повторяющейся границы парсинга 2": ([PARENTGRAN2]) [VALUE], т.е. в каждом цикле "повторяющейся границы парсинга 2" сначала выводим результат "обычную границу парсинга 2" ([PARENTGRAN2] - название группы характеристик), заключённый в круглые скобки и "тело" "повторяющейся границы парсинга 2" ([VALUE]).

    5. Смотрим результат парсинга (в каждом цикле "повторяющейся границы парсинга 2" вначале прописывается своё название группы характеристик из цикла "повторяющейся границы парсинга 1") :

    (Основные характеристики)> Разрешение матрицы </b><td>[12.3 Мпикс]<
    (Основные характеристики)> Видоискатель </b><td>[зеркальный]<
    (Основные характеристики)> Дисплей </b><td>[TFT 2.7"" поворотный]<
    (Объектив)> Фокусное расстояние </b><td>[18-55 мм]<
    (Объектив)> Режимы фокусировки </b><td>[автоматический, ручной]<

    6. С помощью макроса поиск-замена приводим результат парсинга в нужный вид, удаляя ненужные теги кода и вставляя двоеточия и точки с запятой:

    (Основные характеристики) Разрешение матрицы: [12.3 Мпикс];
    (Основные характеристики) Видоискатель: [зеркальный];
    (Основные характеристики) Дисплей: [TFT 2.7"" поворотный];
    (Объектив) Фокусное расстояние: [18-55 мм];
    (Объектив) Режимы фокусировки: [автоматический, ручной];
     
    Последнее редактирование: 20 июл 2015

Поделиться этой страницей