Author Topic: Возможно ли сохранить несколько значений в буфер  (Read 1915 times)

0 Members and 1 Guest are viewing this topic.

GTmaster

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Добрый день, у меня есть такой вопрос возможно ли хранить несколько значений в буфере  памяти например есть строка в блокноте Пример (Первое значение : Второе значение : Третье значение : Четвертое значение : Пятое значение) Вот мне бы и хотелось все пять значение разом сохранить в буфер, а потом подставлять их по мере необходимости, на данном этапе макроса мне приходится выделять каждое, предварительно заходя в  блокнот но в скором времени мне понадобится выхватывать значения ранее выбранные и я понимаю что это будет очень много кода
Заранее благодарен за помощь, всем добра =)
Наилучший вариант например сохранить всю строку в буфер и выхватывать значения через разделитель ":"
« Last Edit: July 06, 2019, 08:27:09 AM by GTmaster »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Никакие открытые блокноты, выделение и копирование не нужны.
Кликер работает с TXT файлами напрямую. Значения можно записать в переменные или массив и затем отправлять их в буфер когда потребуется.

Пример
Code: (clickermann) [Select]
$str = TFREAD("input.txt", 1) // считываем первую строку из файла input.txt в переменную $str
STRSEPARATE($str, ":", $arr) // Разбираем строку в массив по разделителю :

FOR($a=0,$a<ARRSIZE($arr))
   LOGWRITE ($arr[$a]) // в цикле выводим значение каждой ячейки массива в лог
END_CYC
LOGSHOW (1) // показываем лог

HALT // Стоп

Теперь как это использовать.
Данный скрипт считывает твои значения из файла input.txt за тем открывает блокнот и вставляет их по порядку копируя каждое через буфер обмена.
Code: (clickermann) [Select]
$str = TFREAD("input.txt", 1)
STRSEPARATE($str, ":", $arr)

EXECUTE("Notepad.exe") // открываем блокнот
WAITMS(500)

FOR($a=0,$a<ARRSIZE($arr))
   TOCLIP($arr[$a]) // каждый проход цикла в буфер будет отправляться сначала первое значение затем второе и тд.
   WAITMS(50)
   KEYDOWN (#CTRL) // вставляем
   WAITMS (50)
   KEYPRESS (#V)
   KEYUP (#CTRL)
   WAITMS(50)
   KEYPRESS(#ENTER) // переходим на новую строку
   WAITMS(50)
END_CYC

HALT // Стоп

В архиве пример с текстовым файлом.

GTmaster

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Спасибо, полезная информация, только вот боюсь я не совсем правильно указал что нужно мне (Это моя вина), у меня массивный текстовый файл который я использую за основу макроса, суть заключается в том что мне было бы удобнее скопировать всю строку единожды именно ту что выделена в текущий момент в самом блокноте и разделить ее как раз по метке ":", потому что макрос он сам по себе зациклен и стоит на постоянный прогон этих строк, работает он 24 на 7. То есть последняя строка в коде опускает указатель в блокноте на одну строку и повторяет макрос с начала, если произойдет остановка макроса то я не смогу определить где он остановился, а если смогу то мне ручками придется менять номер строки что не есть хорошо, в довесок другие пользователи добавляют новые строки в блокнот.
Много написал по сути мне просто надо так чтобы я сам выделил строку, а после макрос из буфера разделил ее и на текущий повтор работал только с ней

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Code: (clickermann) [Select]
STRSEPARATE(FROMCLIP(), ":", $arr)
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
...если произойдет остановка макроса то я не смогу определить где он остановился, а если смогу то мне ручками придется менять номер строки что не есть хорошо
Это не проблема. Можно сохранять в файл номер текущей строки.

Code: (clickermann) [Select]
IF(TFCOUNT("conf.ini") > 0) // определяем наличие файла конфигурации
   $count = INT(INIREAD("conf.ini", "num")) // если есть присваиваем счетчику значение на котором остановились в прошлый раз
ELSE
   $count = 1 // если его нет присваиваем счетчику значение 1
END_IF

WHILE(1) // бесконечный цикл
   FOR($i=$count,$i<=TFCOUNT("input.txt")) // цикл строк из файла input.txt
     
      INIWRITE("conf.ini", "num", $i) // записываем в файл конфигурации текущий номер строки
      $str = TFREAD("input.txt", $i)
      STRSEPARATE($str, ":", $arr)
     
      FOR($a=0,$a<ARRSIZE($arr)) // цикл обработки значений строки
         
TOCLIP($arr[$a]) // каждый проход цикла в буфер будет отправляться сначала первое значение затем второе и тд.
         WAITMS(50)
         KEYDOWN (#CTRL) // вставляем
         WAITMS (50)
         KEYPRESS (#V)
         KEYUP (#CTRL)
         WAITMS(50)
         KEYPRESS(#ENTER) // переходим на новую строку
         WAITMS(50)
         
      END_CYC
      UNDEFINE($arr) // удаляем массив
     
   END_CYC
END_CYC

GTmaster

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
Эх опять коряво объяснил =)
По порядку не интересно цель в том чтобы облегчить сам процесс и не использовать лишние операции, в ходе работы скрипта будет необходимо вернутся либо к первому значению в строке либо ко второму, сейчас это у меня выполнено так : Открывается блокнот прожимается Home и выбирается нужное значение в зависимости от ситуации. Меня устроит одна строка но с определением 5 значений и в нужный момент макрос смог бы взять с буфера и вставить то что ему нужно. Ini конечно хорошо но на данный момент и так уже скрипт использует 7 программ я уже молчу про количество папок необходимых для работы, добавить сюда еще и ini будет лишним =)

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Эх опять коряво объяснил =)
По порядку не интересно цель в том чтобы облегчить сам процесс и не использовать лишние операции, в ходе работы скрипта будет необходимо вернутся либо к первому значению в строке либо ко второму, сейчас это у меня выполнено так : Открывается блокнот прожимается Home и выбирается нужное значение в зависимости от ситуации. Меня устроит одна строка но с определением 5 значений и в нужный момент макрос смог бы взять с буфера и вставить то что ему нужно. Ini конечно хорошо но на данный момент и так уже скрипт использует 7 программ я уже молчу про количество папок необходимых для работы, добавить сюда еще и ini будет лишним =)

Тогда тебе хватит этого. Значения в строке должны быть разделены символом :
Code: (clickermann) [Select]
UNDEFINE($arr)
STRSEPARATE(FROMCLIP(), ":", $arr)

//$arr[0] - первое значение
//$arr[1] - второе значение
//$arr[2] - третье значение
//$arr[3] - четвертое значение
//$arr[4] - пятое значение

// например
TOCLIP($arr[2]) // отправляем в буфер третье значение
WAITMS(50)
KEYDOWN (#CTRL) // вставляем
WAITMS (50)
KEYPRESS (#V)
KEYUP (#CTRL)
WAITMS (50)
« Last Edit: July 06, 2019, 10:02:01 PM by Oraven »

GTmaster

  • Зашел в гости
  • *
  • Posts: 4
    • View Profile
ВО это уже похоже на то что я хочу, я так полагаю мне просто надо выделить все в буфер потом запустить этот скрипт и у меня будет деление на 5 частей, если да то БОЛЬШОЕ СПАСИБО тебе =)