Author Topic: Перенос инфы с txt в DatEditor  (Read 6232 times)

0 Members and 1 Guest are viewing this topic.

Артём

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Перенос инфы с txt в DatEditor
« on: January 20, 2015, 07:29:12 PM »
Здравствуйте, подскажите плз. Мне нужно копировать текст с блокнота (Пример: iudbf01 до iudbf09), это выглядит так: http://pikucha.ru/ie2KL или отсюда http://pikucha.ru/ie2KK, но желательно для 1 скрина скрипт. Эти названия мне нужно ввести в рядок где выделена ячейка: http://pikucha.ru/ie2KN
Ctrl+C Ctrl+V не катит, т.к. это ID(код предмета), и мне часто нужно вводить 150+ предметов, а значит и 150 разных ID
сначала я написал вот такой скрипт
Code: [Select]
FOR($a, $a < 5)
inc($myvar)
switch($myvar)
case(1)
           KEYSTRING("ihbwa65")
case(2)
          KEYSTRING("iubwa65")
case(3)
         KEYSTRING("ilbwa65")
case(4)
KEYSTRING("igbwa65")
case(5)
KEYSTRING("isbwa65")
default
KEYSTRING("str")
end_switch

  keyDown(13)
waitms(0)
  keyUp(13)
waitms(0)
  keyDown(39)
waitms(0)
  keyUp(39)
waitms(0)
END_CYC


это годится для 5-10 значений, но скрипт приобретает просто громадный вид(особенно если для 150 предметов) и потом через поиск искатьihbwa65 и менять его на iudbf02 и т.д. тоже не мало времени займёт. много инфы нашёл про поиск в одном блокноте строк\букв и т.п. и ввод их в другой блокнот, а вот что-то подобного нету :-\
Подкажите плз, у меня время от времения автокликер не вызывается из трея, тупо висит там и всё, могу только его закрыть, запустить скрипт или отсановить. Win 7
« Last Edit: January 20, 2015, 09:15:33 PM by Артём »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #1 on: January 21, 2015, 10:21:59 AM »
Используй "STRCONCAT" для объединения строк с переменной.

Code: (clickermann) [Select]
$num = 65 // ID
$myvar = 0
FOR($a=0, $a < 5)
   inc($myvar)
   switch($myvar)
   case(1)
      KEYSTRING(STRCONCAT("ihbwa", $num))
   case(2)
      KEYSTRING(STRCONCAT("iubwa", $num))
   case(3)
      KEYSTRING(STRCONCAT("ilbwa", $num))
   case(4)
      KEYSTRING(STRCONCAT("igbwa", $num))
   case(5)
      KEYSTRING(STRCONCAT("isbwa", $num))
   default
   end_switch
   
   KEYPRESS(#ENTER)
   WAITMS(50)
   KEYPRESS(#RIGHT)
   WAITMS(50)
END_CYC

HALT // стоп

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #2 on: January 21, 2015, 10:51:11 AM »
Используй "STRCONCAT" для объединения строк с переменной.

Code: (clickermann) [Select]
$num = 65 // ID
$myvar = 0
FOR($a=0, $a < 5)
   inc($myvar)
   switch($myvar)
   case(1)
      KEYSTRING(STRCONCAT("ihbwa", $num))
   case(2)
      KEYSTRING(STRCONCAT("iubwa", $num))
   case(3)
      KEYSTRING(STRCONCAT("ilbwa", $num))
   case(4)
      KEYSTRING(STRCONCAT("igbwa", $num))
   case(5)
      KEYSTRING(STRCONCAT("isbwa", $num))
   default
   end_switch
   
   KEYPRESS(#ENTER)
   WAITMS(50)
   KEYPRESS(#RIGHT)
   WAITMS(50)
END_CYC

HALT // стоп
И что это ему даст в данном примере  :D
Вообще, по скринам перебираются добавочные числовые индексы, а в коде разные символы...
В общем описание не подходит.

Если там разные варианты, то для каждого случая своё решение.


Артём

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #3 on: January 21, 2015, 07:19:44 PM »
Опишу более подробно тогда :)
Мне нужно добавить в НПС (торговец) оружие и одежду, чтобы это сделать нужно в DatEditor ввести код одежды и оружия. Из одеждой более мение я понял, почитаю спрвочкни ещё более подробно и поексперементирую, но буду рад если вы поможете. К примеру возьму код шмотки: ihbwa65, i-item (предмет) во всех кодах шмотки он не меняется;h - helmet(голова, часть одежды) вот тут нужно менять ещё на l-lower(штаны)  g-Gauntlet(руки)  s-Shoe(ступни) u- Upper(торс). Вот если это всё по порядку поменять и ввести в 5 ячеек, то будет вся одежда для расы b-Белатто, есть ещё c - Cora, a-Acrettia и наконец, последняя переменная - это w - воин, r - лучник, f - маг. 65 - это уровень, а - тип брони, есть ещё b,c и т.д.. Вообщем для вещей 4 переменных надо, с помощью какой функции это можно сделать, чтобы было нормально редактировать?
Теперь оружие, тут сложнее. iwstb65 (к примеру такой код) тут всего лишь 3 переменные "stb" не считая 65(уровень), сочетаний букв много, т.к. видов оружий 10093, а шмотки 7216(кроме головы), только видов голов 7549  ;D
Я сначала думал, может можна как-то с блокнота эту инфу брать, просто кроме одежды и оружия ещё много разных вещей из своим собственным и отличным кодом.
По поводу STRCONCAT, я так понял им можна только менять переменную в конце? а как сделать, чтобы в середине кода менять? зачем $myvar  присваивать 0, тогда отсчёт будет идти же от нуля и в самой первой ячейке будет писать, то что вписано в
default
   end_switch
или я не прав?
https://yadi.sk/i/9HbANQkTe9CPX торс
https://yadi.sk/i/7GVozV5ae9CPP оружие
эт чтобы вы просто наглядно увидили как оно всё меняется
самое первое(1,2,3..) это просто нумерация строк, дальше идёт код предмета для сервера, потом код предмета для клиента, и названия оружия\торса
Вот нашёл "TFREAD ("file", str_n) - строковая функция; считывает строку из файла " а как сделать, чтобы считывала только код предмета для сервера? и т.к. мне нужно синхронизировать сервер=клиент, то и как сделать чтобы считывало только клеинт код?=)
« Last Edit: January 21, 2015, 07:35:14 PM by Артём »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #4 on: January 21, 2015, 08:16:10 PM »
Понятнее на самом деле не становится.
STRCONCAT объединяет сколько угодно строк и переменных в любой последовательности.
Quote
зачем $myvar  присваивать 0
Чтобы на втором проходе скрипта она снова была равна 0. Ведь у тебя же прежде стоит inc($myvar) и она тут же станет 1
Но это только ести скрипт будет повторяться.


Вот так проще всего извлечь твой ServerCode
Code: (clickermann) [Select]
UNDEFINE($arr_str) // обнуляем массив
 // считываем вторую строку и записываем в массив разбив на строки между табами
STRSEPARATE(TFREAD("1 UpperItem(торс).txt", 2), " ", $arr_str)

LOGWRITE ($arr_str[1]) // выводим в лог вторую строку из массива ServerCode
LOGWRITE ($arr_str[2]) // выводим в лог третью строку из массива ClientCode

HALT

Естественно через переменную можно наращивать номер считываемой строки.
Code: (clickermann) [Select]
$n = TFCOUNT("1 UpperItem(торс).txt")
FOR($a=2,$a<$n)
   UNDEFINE($arr_str) // обнуляем массив
   STRSEPARATE(TFREAD("1 UpperItem(торс).txt", $a), " ", $arr_str)
   LOGWRITE ($arr_str[1]) // выводим в лог все ServerCode
END_CYC

HALT
« Last Edit: January 21, 2015, 08:24:12 PM by Oraven »

Артём

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #5 on: January 21, 2015, 09:00:17 PM »
Quote
$num = 65 // ID
$myvar = 0
FOR($a=0, $a < 5)
   inc($myvar)
   switch($myvar)
   case(1)
      KEYSTRING(STRCONCAT("ihbwa", $num))
   case(2)
      KEYSTRING(STRCONCAT("iubwa", $num))
   case(3)
      KEYSTRING(STRCONCAT("ilbwa", $num))
   case(4)
      KEYSTRING(STRCONCAT("igbwa", $num))
   case(5)
      KEYSTRING(STRCONCAT("isbwa", $num))
   default
   end_switch
 
   KEYPRESS(#ENTER)
   WAITMS(50)
   KEYPRESS(#RIGHT)
   WAITMS(50)
END_CYC
 
HALT // стоп
не получается в таблицу вставить :(, только через цитату
я сначала думал, чтобы в этотм скрипте были переменные hbw и тогда не нужно будет
Quote
case(2)
      KEYSTRING(STRCONCAT("iubwa", $num))
   case(3)
      KEYSTRING(STRCONCAT("ilbwa", $num))
   case(4)
      KEYSTRING(STRCONCAT("igbwa", $num))
   case(5)
      KEYSTRING(STRCONCAT("isbwa", $num))
а только case(1) с 3 переменными, чтобы менялась 2,3,4 буква в коде ihbwa на другие
По поводу твоих скриптов:
Информация у меня выводится в лог, но походу все servercode не влазят в лог и оно заменяет друг друга и когда скрипт заканчивает роботу, в логу написано только 63,65 торсы(тоисть в конце кода стоят только цирфы 63.65, а есть ещё 01,02,03 и т.д.). Но я тут подумал.. в основном мне нужны только пару десяток строк, можна ли вывести информацию от 45 до 70 строки включительно?  Вот так подойдет FOR($a=45,$n=70,$a<$n)? и как вывести информацию из лога в DateRditor(туда мне нужно писать через KEYSTRING, по другому никак). Нашёл только как вывести из лога в текстовик информацию, нужно использовать LOGWRITE (PRINT), а вот как просто из лога выделить (допустим) 46 строку и написать её куда-то - нету >:(
« Last Edit: January 21, 2015, 09:32:59 PM by Артём »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #6 on: January 21, 2015, 09:52:28 PM »
мдааааа....... разжевываешь разжевываешь....
Зачем тебе вообще лог, там я писал для примера, но нам же все надо разжевать и в клювик положить.

Code: (clickermann) [Select]
$n = TFCOUNT("1 UpperItem(торс).txt") // в N записывается число строк в файле, столько и будет циклов
FOR($a=2,$a<$n) // цикл начинается с 2 то есть со второй строки
   UNDEFINE($arr_str) // обнуляем массив
   STRSEPARATE(TFREAD("1 UpperItem(торс).txt", $a), " ", $arr_str) // читаем
   WAITMS(50)
   KEYSTRING($arr_str[1]) // печатаем ServerCode
   WAITMS(50)
   KEYPRESS(#ENTER) // Энтр
   WAITMS(50)
   KEYPRESS(#RIGHT) // вправо
   WAITMS(50)
END_CYC
// и так пока не кончатся строки в файле 1 UpperItem(торс).txt

HALT // а теперь стоп

А если хочешь извлечь все ServerCode в другой файл то вот.
Code: (clickermann) [Select]
$n = TFCOUNT("1 UpperItem(торс).txt")
FOR($a=2,$a<$n)
   UNDEFINE($arr_str) // обнуляем массив
   STRSEPARATE(TFREAD("1 UpperItem(торс).txt", $a), " ", $arr_str) // читаем
   ARRPUSH($arr_out, $arr_str[1]) // пишем в другой массив
END_CYC
TFWRITEARR("1 UpperItem(торс) ServerCode.txt", $arr_out) // скидываем массив в файл

HALT
Но я надеюсь первый пример это то что тебе нужно

Артём

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #7 on: January 21, 2015, 10:16:48 PM »
ааааа, я просто пытался сразу на все стороны разорваться и за один приход всё сделать вот и получилось недопонимание
вот:
Quote
$n = TFCOUNT("1 UpperItem(торс).txt") // в N записывается число строк в файле, столько и будет циклов
FOR($a=2,$a<$n) // цикл начинается с 2 то есть со второй строки
   UNDEFINE($arr_str) // обнуляем массив
   STRSEPARATE(TFREAD("1 UpperItem(торс).txt", $a), " ", $arr_str) // читаем
   WAITMS(50)
   KEYSTRING($arr_str[1]) // печатаем ServerCode
   WAITMS(50)
   KEYPRESS(#ENTER) // Энтр
   WAITMS(50)
   KEYPRESS(#RIGHT) // вправо
   WAITMS(50)
END_CYC
// и так пока не кончатся строки в файле 1 UpperItem(торс).txt
 
HALT // а теперь стоп
тут я понял, это я почти всё дописал сам, но Огромное спасибо тебе, а то было у меня пару ошибок. Если я хочу чтобы считывало текст с 7200 строки, то я просто поставлю $a=7200, это я понял уже ;D а как сделать, чтобы цикл ишёл:
1)от 7200 до 7222 строки   
2) от 72 до 83, а потом от 95 до 106
(цифры брал рандомно, просто хочу до конца добить его уже)
 щас пробую через SWITCH сделать, но будет лучше если профи подскажет :D
Теперь другое:
Можна ли сделать меньше этот скрипт? а то мне надо таким методом брать информацию из строк 7219 в 5 текстовых документах
Quote
FOR($c, $c < 2)
   inc($myvar)
   switch($myvar)
   case(1)
      $n = TFCOUNT("D:\RPKExtractor\DatEdit\Item(Text)\1 UpperItem(òîðñ).txt")
      FOR($a=7219,$a<$n)
         UNDEFINE($arr_str) // îáíóëÿåì ìàññèâ
         STRSEPARATE(TFREAD("D:\RPKExtractor\DatEdit\Item(Text)\1 UpperItem(òîðñ).txt", $a), "   ", $arr_str)
         LOGWRITE ($arr_str[1]) // âûâîäèì â ëîã âñå ServerCode
      END_CYC
     
   case(2)
     
      $n = TFCOUNT("D:\RPKExtractor\DatEdit\Item(Text)\2 LowerItem(øòàíû).txt")
      FOR($a=7219,$a<$n)
         UNDEFINE($arr_str) // îáíóëÿåì ìàññèâ
         STRSEPARATE(TFREAD("D:\RPKExtractor\DatEdit\Item(Text)\2 LowerItem(øòàíû).txt", $a), "   ", $arr_str)
         LOGWRITE ($arr_str[1]) // âûâîäèì â ëîã âñå ServerCode
      END_CYC
     
   default
     
   end_switch
   
   
END_CYC
HALT

         

аа я щас с ума сойду, походу & не воспринимает, щас буду пытаться сделать чтобы брало 25 строку из upper и shoe
ужс, терь и коментарии заменяться на знаки вопросов
Вобщем я вкурил как брать строки из 2+ файлов, а вот строки от 20 до 30 и от 45 до 50 не могу сообразить
Сделал, чтобы можна было брать только определные строки 1 раз
Quote
$n = TFCOUNT("D:\RPKExtractor\DatEdit\Item(Text)\1 UpperItem(òîðñ).txt")
   
   FOR($a=7214, ($a<$n)&($a<7215) )
         
      UNDEFINE($arr_str) // îáíóëÿåì ìàññèâ
      STRSEPARATE(TFREAD("D:\RPKExtractor\DatEdit\Item(Text)\1 UpperItem(òîðñ).txt", $a), "   ", $arr_str)
      LOGWRITE ($arr_str[1]) // âûâîäèì â ëîã âñå ServerCode
     
   END_CYC
HALT
а как сделать, чтобы цыкл продолжался после 7215 и брало строку от 7217 до 7219? не могу понять как это сделать :'(
« Last Edit: January 22, 2015, 01:11:26 AM by Артём »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #8 on: January 22, 2015, 09:14:56 AM »
...Но я тут подумал.. в основном мне нужны только пару десяток строк, можна ли вывести информацию от 45 до 70 строки включительно?  Вот так подойдет FOR($a=45,$n=70,$a<$n)?

FOR($a=45, $a<71)


Артём

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #9 on: January 22, 2015, 04:13:13 PM »


FOR($a=45, $a<71)
FOR($a=45, ($a<$n)&($a<70) ) вот так будет правильнее, иначе светит ошибку
а вот как сделать чтобы скрипт брал строки от 45 до 70, а потом от 75 до 80(цифры беру рандомные)?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #10 on: January 22, 2015, 04:41:13 PM »
Просто добавим серию корректирующих условий

Code: (clickermann) [Select]
$n = TFCOUNT("1 UpperItem(торс).txt") // в N записывается число строк в файле, столько и будет циклов
FOR($a=2,$a<$n) // цикл начинается с 2 то есть со второй строки
   
   IF($a = 2) // если А 2
      $a = 45 // то изменяем на 45
   END_IF
   
   IF($a = 71) // если А 71
      $a = 75 // то изменяем на 75
   END_IF
   
   IF($a = 81) // если А 81)
      HALT // то стоп
   END_IF
   
   UNDEFINE($arr_str) // обнуляем массив
   STRSEPARATE(TFREAD("1 UpperItem(торс).txt", $a), " ", $arr_str) // читаем
   WAITMS(50)
   KEYSTRING($arr_str[1]) // печатаем ServerCode
   WAITMS(50)
   KEYPRESS(#ENTER) // Энтр
   WAITMS(50)
   KEYPRESS(#RIGHT) // вправо
   WAITMS(50)
END_CYC
// и так пока не кончатся строки в файле 1 UpperItem(торс).txt

HALT // а теперь стоп

Артём

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #11 on: January 22, 2015, 04:48:42 PM »
просто офигеть... я бы сам и не додумался, догадывался, что мб через IF нужно делать, а вот как его сдлеать не знал
Спасибо Огромное

Артём

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #12 on: January 22, 2015, 09:14:16 PM »
помогите плз разобраться со скриптом :D
суть такая: нужно составить 9слов -1)ihbwa65 2)ihcwa65 3)ihawa65 4)ihbra65 5)ihcra65 6)ihara65 7)ihbfa65 8)ihcfa65 9)ihafa65
вот наглядно http://pikucha.ru/ie45X
вот я написал скрипт:
Code: (clickermann) [Select]
UNDEFINE($myvar)
UNDEFINE($mv)
UNDEFINE($my)
UNDEFINE($mq)
UNDEFINE($mw)


$a=1
FOR($a, $a < 2)
   INC($myvar)
   
   SWITCH($myvar)
   CASE(1)
      $1=h
      IF($1=h)
         
         $b=1
         FOR($b, $b < 4)
            INC($my)
            SWITCH($my)
            CASE(1)
               $2=b
               IF($2=b)
                  wrf:
                  $c=1
                  FOR($c, $c < 4)
                     INC($mv)
                     SWITCH($mv)
                     CASE(1)
                        $3=w
                     CASE(2)
                        $3=r
                     CASE(3)
                        $3=f
                     DEFAULT
                     END_SWITCH
                  END_CYC
               END_IF
            CASE(2)
               $2=c
               IF($2=c)
                  GOTO(wrf)
               END_IF
            CASE(3)
               $2=a
               IF($2=a)
                  GOTO(wrf)
               END_IF
               
            DEFAULT
            END_SWITCH
         END_CYC
      END_IF
     
     
   DEFAULT
   END_SWITCH
   
   
   logwrite("i",$1,$2,$3,"a65")
END_CYC

HALT
итого: пишет в логе iHAFa65, если ставлю вначале цикл больше, то пишет столько же раз iHAFa65
вроде везде закрыл IF\свитч\FOR
а если вместо logwrite("i",$1,$2,$3,"a65") поставить KEYSTRING ("i",$1,$2,$3,"a65"), то в блокноте вообще не печатает :'(
« Last Edit: January 22, 2015, 09:32:12 PM by Артём »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #13 on: January 22, 2015, 10:55:40 PM »
Из справки:
Имена для переменных могут содержать буквы латинского алфавита, цифры и знак "_" (нижнее подчеркивание). При этом перед именем обязательно должен идти префикс "$", а само имя не должно начинаться с цифры. К примеру, "$my_var1" - вполне допустимое имя для переменной.

Цикл FOR сам не обнуляется и в место этого
Code: (clickermann) [Select]
$c=1
FOR($c, $c < 4)
проще писать так
Code: (clickermann) [Select]
FOR($c=1, $c < 4)
Строки должны быть заключены в кавычки.
Code: (clickermann) [Select]
$1="h"
Ну и ты опять забыл про STRCONCAT

Вот то что ты хочешь, только короче и при том еще и работает  8)

Code: (clickermann) [Select]
FOR($b=1,$b<3+1)
   $s2 = STRCUT("wrf", $b, 1) // режем строку
   FOR($c=1,$c<3+1)
      $s1 = STRCUT("bca", $c, 1) // режем строку
      $str = STRCONCAT("i","h",$s1,$s2,"a65")
      LOGWRITE ($str) // или KEYSTRING
   END_CYC
END_CYC

HALT

Лог:
Code: [Select]
23:56:09 ihbwa65
23:56:09 ihcwa65
23:56:09 ihawa65
23:56:09 ihbra65
23:56:09 ihcra65
23:56:09 ihara65
23:56:09 ihbfa65
23:56:09 ihcfa65
23:56:09 ihafa65
« Last Edit: January 22, 2015, 10:57:51 PM by Oraven »

Артём

  • Зашел в гости
  • *
  • Posts: 13
    • View Profile
Re: Перенос инфы с txt в DatEditor
« Reply #14 on: January 22, 2015, 11:43:57 PM »
я просто офигеваю как всё просто получается :) Спасибо тебе огромное

щас буду пробовать сделать, чтобы было вот так(чтобы сначала менялись буквы rfw потом bca):
Code: (Лог) [Select]
ihbwa65
ihbra65
ihbfa65
ihcwa65
ihcra65
ihcfa65
ihawa65
ihara65
ihafa65
сначала помучаюсь :), а если не будет получаться, то уже попрошу помощи, Очень хочу научится скриптовать в кликере ::)
« Last Edit: January 22, 2015, 11:46:02 PM by Артём »