Условие в поиск замена

Тема в разделе "Решение различных задач по парсингу", создана пользователем uskirill, 7 июн 2017.

  1. uskirill

    uskirill Member Пользователи

    Регистрация:
    14 дек 2016
    Сообщения:
    35
    Здравствуйте! Подскажите, пожалуйста, можно ли в поиск замена написать условие? И как это сделать?
    Нужно: к имеющемуся числу прибавить 200 и если полученное число меньше 2000, то вывести пустое место, а если больше то получившееся число.
     
    vovan1409 нравится это.
  2. Dumka

    Dumka Well-Known Member Пользователи

    Регистрация:
    8 фев 2012
    Сообщения:
    121
    Это не нужно делать с помощью "поиск-замена"
    Проще всего в шаблоне вывода сделать что то типа такого:
    Код:
    [IF1][MATH]<CD_GRAN_1!>+200[/MATH]>2000[THEN][MATH]<CD_GRAN_1!>+200[/MATH][ELSE][/IF1]
    Где <CD_GRAN_1!> это граница с исходной цифрой
     
    Root и Diabet нравится это.
  3. uskirill

    uskirill Member Пользователи

    Регистрация:
    14 дек 2016
    Сообщения:
    35
    Не получается использовать [IF1] и [IF2] потому что число уже стоит в макросе [IFNIL]. Если я в макрос [IFNIL] ставлю [IF1] или [IF2], то результат выводится не верный. Нужно как то через поиск замену... или еще как-то...
     
  4. Root

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

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

    Вместо макроса [IFNIL] использовать [IFNIL2]

    2017-06-07_14-23-52.png
     
  5. uskirill

    uskirill Member Пользователи

    Регистрация:
    14 дек 2016
    Сообщения:
    35
    Перепробовал [IF1] и [IF2] приконектить к макросам [IFNIL1], [IFNIL2], [IFNIL3] в разных порядках и комбинациях - не конектятся. Мне то выходит только то что в макросе IF стоит после [ELSE] либо выводятся в строку CSV сам код макроса(например: [IF2]19,5<2000[THEN]19,5*1,4+200)
     
  6. uskirill

    uskirill Member Пользователи

    Регистрация:
    14 дек 2016
    Сообщения:
    35
    Мне кажется проблема в [ELSE] , ведь этот оператор используется в двух макросах ( [IF] и [IFNIL] ), вот программа понять не может к какому макросу относиться [ELSE]
     
  7. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Постараюсь разобраться в ближайшие три дня.
     
    uskirill нравится это.
  8. uskirill

    uskirill Member Пользователи

    Регистрация:
    14 дек 2016
    Сообщения:
    35
    Спасибо )
     
  9. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Код:
    [MATH]if[[(2000+200)>2000]]then[[2000+200]][/MATH]
     
    uskirill нравится это.
  10. uskirill

    uskirill Member Пользователи

    Регистрация:
    14 дек 2016
    Сообщения:
    35
    Вот спасибо! Теперь все заработает!! )))
     
  11. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Пожалуйста.

    Вот добавил примеры использования макроса [MATH] Ссылки недоступны для гостей
     
  12. uskirill

    uskirill Member Пользователи

    Регистрация:
    14 дек 2016
    Сообщения:
    35
    Опять результат неверный выходит, думаю теперь проблема с порядком выполнения макроса.

    Посмотрите мой код пожалуйста:
    [LOADCSV(1)]D:\Domoviq\13-Belyi_Medved\import\price.csv[/LOADCSV] - Загружаем прайс поставщика
    [LOADCSV(2)]D:\Domoviq\13-Belyi_Medved\import\13-import.csv[/LOADCSV] -Загружаем прайс нашего склада

    На цену поставщика делаем переменную [VAR][SET:price][REPLACE(руб.|{break}.|,{break} |)][GETCSVDATA(1)][GETCSVCOORD(1)]Y|5|[EXACT]<CD_GRAN_2!>[/GETCSVCOORD]|9[/GETCSVDATA][/REPLACE][/SET][/VAR]

    И теперь делаем проверку с помощью макроса [IFNIL2] если на нашем складе есть товар, то выводим его цену, а если нет, тогда выводим цену поставщика, но цену поставщика нужно умножить до 2000 на 1,4 + 200, а свыше 2000 на 1,4

    [IFNIL2][GETCSVDATA(2)][GETCSVCOORD(2)]Y|1|[EXACT]<CD_GRAN_2!>[/GETCSVCOORD]|2[/GETCSVDATA][ELSE][MATH]if[[[VAR:price]<2000]]then[[[VAR:price]*1,4+200]]else[[[VAR:price]*1,4]][/MATH][/IFNIL2]

    Результат который получается у меня для цены от поставщика:
    Если цена выше 2000: 2301*1,4 (MATH не умножил значение, прям так как есть в CSV и вставил)
    Если цена ниже 2000: 19,5*1,4 (MATH опять не перемножил значение, и кроме того должен был прибавить 200, а этого не сделал)

    Помогите пожалуйста что делаю не так? Уже всю голову сломал.
     
  13. Root

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

    Регистрация:
    10 мар 2010
    Сообщения:
    14.818
    Город:
    Барнаул
    Файл проекта вместе с CSV предоставьте.
     

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