Повторяющихся границ - шесть, а результат парсинга - один

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

  1. Michel_S_1958

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

    Регистрация:
    8 июн 2015
    Сообщения:
    38
    1. Имеется блок кода web страницы:

    <div class="conditionbox clearfix">
    <table class="conditionlist">
    <tr class="other">
    <td>新同品</td> (примечание: Состояние "Как новый")
    </tr>
    <tr class="other">
    <td>美品</td> (примечание: Состояние "Отличное")
    </tr>
    <tr class="other">
    <td>良品</td> (примечание: Состояние "Хорошее")
    </tr>
    <tr class="focus">
    <td>並品</td> (примечание: Состояние "Среднее")
    </tr>
    <tr class="other">
    <td>難有品</td> (примечание: Состояние "С незначительными проблемами")
    </tr>
    <tr class="other">
    <td>ジャンク品</td> (примечание: Состояние "Непригоден к эксплуатации")
    </tr>
    </table>
    </div>

    2. Выделяем его границей парсинга, чтобы потом ограничить этим блоком повторяющиеся границы.
    3. В повторяющихся границах определяем начало <tr class=" и конец парсинга ">
    4. В результате парсинга получаем колонку из 6 строк:

    other
    other
    other
    focus
    other
    other

    5. А на самом деле результатом парсинга должна стать строка "Состояние "Среднее".
    Т.е. нужно определить порядковый номер "прохода" повторяющейся границы (в нашем случае № 4 из 6 возможных), у которой результат парсинга focus. И потом вывести вместо номера 4 в результат парсинга строку "Состояние "Среднее".
    У каждого номера из 6 возможных своя строка (см. примечание в блоке кода).

    Может быть намудрил, но на японском сайте Состояние товара обозначено путем выделения красным цветом одной из 6 строк возможных состояний. Поэтому выбрал такой алгоритм парсинга.
    Подскажите, пожалуйста, какие макросы можно тут применить?
    1. Макрос - как присвоить номер каждому проходу в повторяющихся границах (что-то типа макроса [INT_ID], только в пределах повторяющихся границах?
    2. Затем как применить с помощью макросов два условия IF с условиями:
    - если результат прохода повторяющейся границы "focus"
    - если номер этого прохода 4
    - то выводим в результат парсинга строку "Состояние "Среднее"?
     
    Последнее редактирование: 2 сен 2015
  2. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Здравствуйте.
    Начало: <tr class="focus">{skip}(примечание:
    Конец: )

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

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

    Регистрация:
    8 июн 2015
    Сообщения:
    38
    Сергей!....
    Примечания нет в коде. Это я для ясности задачи дописал в посте. Если бы оно было, то всё было бы просто. Это чисто японский сайт без строк из кириллицы.
     
  4. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Просто дайте ссылку на WEB-страницу и покажите, что из нее взять и в каком виде сохранить, постараюсь сделать. Мне так проще помочь. Прошу понять.

    Спасибо!
     
  5. Michel_S_1958

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

    Регистрация:
    8 июн 2015
    Сообщения:
    38
    Я решил задачу, но получилось громоздко.

    1. Ссылка на страницу:
    Скрытое содержимое:
    **Скрытое содержимое: доступно при наличии 1 постов.**
    2. Границы блока кода, который я обрабатываю:

    начало парсинга
    <div class="conditionbox clearfix">
    конец парсинга
    </div>

    3. В этом блоке шесть строк, которые ограничены
    начало
    <tr class=
    конец
    </tr>

    4. В той строке (из 6), в которой <tr class="focus">
    нужно итогом парсинга сделать вывод русского текста:

    если в первой строке <tr class="focus">, то выводим текст: Состояние "Как новый"
    если во второй строке <tr class="focus">, то выводим текст: Состояние "Отличное"
    если во третьей строке <tr class="focus">, то выводим текст: Состояние "Хорошее"
    если во четвертой строке <tr class="focus">, то выводим текст: Состояние "Среднее"
    если в пятой строке <tr class="focus">, то выводим текст: Состояние "С незначительными проблемами"
    если в шестой строке <tr class="focus">, то выводим текст: Состояние "Непригоден к эксплуатации"

    5. Я решил эту задачу так.

    - Блок кода выделил границами парсинга <CD_GRAN_9!> (см. пункт 2).

    - Затем в дополнительных настройках границ парсинга обработал весь блок макросом поиск-замена:

    <tr class="focus">{get}</tr>|{get}
    <th>{get}</th>|{get}

    - И напоследок в основном окне проекта тупо написал шесть раз последовательно макрос

    [IF1]<CD_GRAN_9!>[TEXTEQUAL]新同品[THEN]Состояние "Как новый"[/IF1][IF1]<CD_GRAN_9!>[TEXTEQUAL]美品[THEN]Состояние "Отличное"[/IF1][IF1]<CD_GRAN_9!>[TEXTEQUAL]良品[THEN]Состояние "Хорошее"[/IF1][IF1]<CD_GRAN_9!>[TEXTEQUAL]並品[THEN]Состояние "Среднее"[/IF1][IF1]<CD_GRAN_9!>[TEXTEQUAL]難有品[THEN]Состояние "С незначительными проблемами"[/IF1][IF1]<CD_GRAN_9!>[TEXTEQUAL]ジャンク品[THEN]Состояние "Непригоден к эксплуатации или его работоспособность не подтверждена"[/IF1]

    Это работает, но некрасиво получается. Есть что-то изящнее?

    6. Раньше я писал, что пробовал использовать макрос [SYN]…[/SYN]. Тогда все эти "переводы" можно было бы вписать в файл data.txt и ограничится одной записью в виде одного макроса [SYN]…[/SYN], но этот макрос не воспринимает иероглифы. Жаль. На основе макроса [SYN]…[/SYN], можно было бы сделать универсальный макрос [IF1]текст1[TEXTEQUAL]текст2[THEN]выведет это, если текст 1 равен тексту 2[ELSE]нет[/IF1], где текст1 и "выведет это..." фактически были бы как синонимы.
     
    Последнее редактирование: 2 сен 2015
  6. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.442
    Адрес:
    Latvia
    Пробуйте простой границей цеплять начало за
    <tr class="focus">{skip}</th>
    конец границы за </td>
    В дополнительные настройки границы в поиск замену
    多少の使用があるものの、外観のきれいな中古品|Состояние "Как новый"
     
  7. Michel_S_1958

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

    Регистрация:
    8 июн 2015
    Сообщения:
    38
    Спасибо, kagorec!
    Ваш совет помог мне сделать решение немного красивее.

    Я вместо макросов [IF1]...[/IF1] в основном окне, перенес "переводы" с японского в дополнительные настройки простых границ парсинга. Просто дописал туда шесть строк:

    新同品|Состояние "Как новый"
    美品|Состояние "Отличное"
    良品|Состояние "Хорошее"
    並品|Состояние "Среднее"
    難有品|Состояние "С незначительными проблемами"
    ジャンク品|Состояние "Непригоден к эксплуатации или его работоспособность не подтверждена"

    Получился своеобразный "филиал" мини синонимайзера. Заменитель файла data.txt.
     
    Последнее редактирование: 2 сен 2015

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