Автокликер Clickermann :: Форум
Основной раздел => Использование => Topic started by: Луций 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
первый случай пытаюсь реализовать через перебор строки и остановку на совпадении с списком спецсимволов, а вот что делать со вторым столбом? разбивать на массив стрсепарейтом? что делать с еденичными англ буквами возможными?
-
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)
Лог:
15:00:23 Артикул: 16176 Название: Horizon
15:00:23 Артикул: 46309 Название: OS
15:00:23 Артикул: A02115 Название: Fischer
15:00:23 Артикул: A04715 Название: Fischer
-
А это на лету нужно?
А то в Notepad++ регулярками можно
Найти: (\w+)\S* \S* [^a-zA-Z]*([a-zA-Z]+).*
Заменить \1 \2
Вход
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
Выход
16176 Horizon
46309 OS
A02115 Fischer
A04715 Fischer
-
IF(STRLEN($st2) > 1)
Я так предполагаю, что в артикуле возможна не одна буква, нужно артикул в названии полностью игнорировать
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
-
ага все верно, спасибо
завтра допилю до вида который не стыдно сюда выкладывать и выложу
не знал что кликеру важен регист и нужно оба добавлять в ренж, так получается можно и слова которые с большой буквы начинаются специально отлавливать?
-
вобщем адаптировал я бота под работу с экселевской таблицей и все работает:
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
один баг пока нашел - если имя начинается с английского слова (которое как раз и нужно, артикула и русских букв в названии нет) - оно игнорируется, я так понял нужно делать проверку на наличие артикула в имени и если нужно удалять его, а затем искать английякое имя с первого члена массива?