Author Topic: Задачка на выделение текста  (Read 2655 times)

0 Members and 1 Guest are viewing this topic.

Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
Задачка на выделение текста
« on: November 25, 2016, 01:19:46 PM »
Есть у меня следующая задача: есть прайс - список в два столбца, в первом идет артикул, во втором название:

16176-10000   16176-10000 Светр жін.  Horizon, чорн. M
46309-72000   46309-72000 Пов'язка на шию, синя OS
A02115.190   A02115.190 Лижі гірські Fischer RC4 Worldcup GS Men medium WCP Race Booster, 190 190
A04715.155   A04715.155 Лижі гірські Fischer RC4 Worldcup SL Women med WCP, 155 155

мне нужно из первого столбца вытащить половину артикула до символа-разделителя, со второго - первое слово на английском "бренд" (что бы потом проверить наличие в базе), например из первой строки должно получиться:
 
a=16176
b=Horizon

первый случай пытаюсь реализовать через перебор строки и остановку на совпадении с списком спецсимволов, а вот что делать со вторым столбом? разбивать на массив стрсепарейтом? что делать с еденичными англ буквами возможными?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Задачка на выделение текста
« Reply #1 on: November 25, 2016, 02:01:20 PM »
Code: (clickermann) [Select]
IF(TFCOUNT("Text.txt") > $count)
   INC($count,1)
ELSE
   HALT
END_IF

$str = TFREAD ("Text.txt", $count)
STRSEPARATE($str, " ", $arr)

IF(STRPOS($arr[0], "-") > 0)
   $st1 = STRCUT2 ($arr[0], 1, STRPOS($arr[0], "-")-1)
ELSE
   IF(STRPOS($arr[0], ".") > 0)
      $st1 = STRCUT2 ($arr[0], 1, STRPOS($arr[0], ".")-1)
   END_IF
END_IF


FOR($a=1,$a<ARRSIZE($arr))
   $st2 = STRFILTER($arr[$a], "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 1)
   IF(STRLEN($st2) > 1)
      $a=99999
   END_IF
END_CYC
UNDEFINE($arr)

LOGWRITE ("Артикул: ", $st1, " Название: ", $st2)

Лог:
Code: [Select]
15:00:23 Артикул: 16176 Название: Horizon
15:00:23 Артикул: 46309 Название: OS
15:00:23 Артикул: A02115 Название: Fischer
15:00:23 Артикул: A04715 Название: Fischer
« Last Edit: November 25, 2016, 02:07:08 PM by Oraven »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Задачка на выделение текста
« Reply #2 on: November 25, 2016, 02:25:49 PM »
А это на лету нужно?
А то в Notepad++ регулярками можно
Code: [Select]
Найти:      (\w+)\S*   \S* [^a-zA-Z]*([a-zA-Z]+).*
Заменить  \1 \2

Вход
Code: [Select]
16176-10000   16176-10000 Светр жін.  Horizon, чорн. M
46309-72000   46309-72000 Пов'язка на шию, синя OS
A02115.190   A02115.190 Лижі гірські Fischer RC4 Worldcup GS Men medium WCP Race Booster, 190 190
A04715.155   A04715.155 Лижі гірські Fischer RC4 Worldcup SL Women med WCP, 155 155

Выход
Code: [Select]
16176 Horizon
46309 OS
A02115 Fischer
A04715 Fischer


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Задачка на выделение текста
« Reply #3 on: November 25, 2016, 02:32:00 PM »
IF(STRLEN($st2) > 1)

Я так предполагаю, что в артикуле возможна не одна буква, нужно артикул в названии полностью игнорировать
Code: (clickermann) [Select]
FOR($a=1,$a<ARRSIZE($arr))
   IF ($arr[$a] ! $arr[0])
      $st2 = STRFILTER($arr[$a], "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 1)
      IF(STRLEN($st2) > 1)
         $a=99999
      END_IF
   END_IF
END_CYC


Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
Re: Задачка на выделение текста
« Reply #4 on: November 25, 2016, 03:49:07 PM »
ага все верно, спасибо

завтра допилю до вида который не стыдно сюда выкладывать и выложу

не знал что кликеру важен регист и нужно оба добавлять в ренж, так получается можно и слова которые с большой буквы начинаются специально отлавливать?

Луций

  • Активный участник
  • ***
  • Posts: 248
  • чат в телеге: https://t.me/klickermannchat
    • View Profile
    • Пишу скрипты на заказ:
Re: Задачка на выделение текста
« Reply #5 on: November 26, 2016, 10:32:28 PM »
вобщем адаптировал я бота под работу с экселевской таблицей и все работает:

Code: (clickermann) [Select]
ctrl(#c)
if($art="w")
   print("wait 10 sec")
   wait(10)
end_if

$art=fromclip()
IF(STRPOS($art, "-") > 0)
   $art = STRCUT2 ($art, 1, STRPOS($art, "-")-1)
ELSE
   IF(STRPOS($art, ".") > 0)
      $art = STRCUT2 ($art, 1, STRPOS($art, ".")-1)
   END_IF
END_IF
keypress(#right)

ctrl(#c)
$name=strconcat(" ",fromclip())
STRSEPARATE($name, " ", $arr)
FOR($a=1,$a<ARRSIZE($arr))
   $name = STRFILTER($arr[$a], "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", 1)
   IF(STRLEN($name) > 1)
      $a=99999
   END_IF
END_CYC
keypress(#left)
print("art = ",$art," name = ",$name)
undefine($arr)

if(strlen($name)>1)
   $n=0
   ctrl(#2)
   waitms(222)
   getscreen
   IF_PICTURE_IN(0,0, $_xmax,$_ymax, "art.bmp")
      lclick(360,320)
      ctrl(#a)
      keypress(#delete)
      toclip($name)
      ctrl(#v)
      keypress(#tab)
      ctrl(#a)
      keypress(#delete)
      toclip($art)
      ctrl(#v)
      keypress(#enter)
      wait(1)
   else
      LCLICK(385,13)  // 3622107
      ctrl(#t)
      toclip("index.php?route=catalog/product")
      ctrl(#v)
      keypress(#enter)
      wait(5)
      getscreen
      IF_PICTURE_IN(0,0, $_xmax,$_ymax, "enter.bmp")
         lclick($_return1,$_return2)
         wait(5)
         ctrl(#1)
      else
         LCLICK(380,13)  // 3622107
      end_if
      goto(begin)
   end_if
   
   $f=1
   waitms(500)
   while($f)
      IF_PICTURE_IN(0,0, $_xmax,$_ymax, "motologo.bmp")
         $f=0
      else
         waitms(500)
      end_if
   end_cyc
   
   $f=0
   $f1=0
   GETSCREEN
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "checkbox.bmp")
      $f=1
   end_if
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "nasayte.bmp")
      $f1=2
   end_if
   ctrl(#1)
   if($f=1)
      ctrl(#b)
   end_if
   if($f1=1)
      ctrl(#i)
   end_if
   keypress(#down)
end_if

один баг пока нашел - если имя начинается с английского слова (которое как раз и нужно, артикула и русских букв в названии нет) - оно игнорируется, я так понял нужно делать проверку на наличие артикула в имени и если нужно удалять его, а затем искать английякое имя с первого члена массива?