Подскажите как отправлять инфу из QUIK в телеграм? Встроенными средствами это сделать нельзя.
Не понятно каким путем двигаться, с чего начать. Делать вывоз по DDE и забирать данные из оперативной памяти? Или можно проще? Может кто то уже делал и может "на пальцах" объяснить ?
Штатного функционала для выполнения подобных задач не предусмотрено. Как вариант, Вы можете при помощи собственного скрипта, написанного на Lua, получать данные из терминала и отправлять их куда Вам нужно.
Начни с конца. 1.в телеграм получи свой chat id 2.создай telegram bot и получи его token 3.возьми язык, который знаешь,(c++, c#, java ...) разберись как послать строку в телеграмм своему боту по token, который по твоему chat id пошлет тебе эту строку в виде сообщения 4.в lua напиши скрипт, который собирает нужную тебе инфо и передает(есть разные варианты) в программу, написанную на см.п.3. 5.(не обязательно) напиши красивую оболочку на языке, который знаешь, в которой ты делаешь выбор(ставишь галочки), какую именно информацию(большой список) тебе необходимо передавать из квик в телеграмм.
Начни с конца. 1.в телеграм получи свой chat id 2.создай telegram bot и получи его token 3.возьми язык, который знаешь,(c++, c#, java ...) разберись как послать строку в телеграмм своему боту по token, который по твоему chat id пошлет тебе эту строку в виде сообщения 4.в lua напиши скрипт, который собирает нужную тебе инфо и передает(есть разные варианты) в программу, написанную на см.п.3. 5.(не обязательно) напиши красивую оболочку на языке, который знаешь, в которой ты делаешь выбор(ставишь галочки), какую именно информацию(большой список) тебе необходимо передавать из квик в телеграмм.
1. Готово 2. Готово 3. Знаю только ПИТОН. ,(c++, c#, java) НЕ знаю 4. Вот это основная проблема! Читал кучу инфы но так и не допёр как сделать 5. С начала надо разобраться с пунктом 4 ))
1. Готово 2. Готово 3. Знаю только ПИТОН. ,(c++, c#, java) НЕ знаю 4. Вот это основная проблема! Читал кучу инфы но так и не допёр как сделать 5. С начала надо разобраться с пунктом 4 ))
3.Если знаете ПИТОН, то пишите на ПИТОНе. Разницы нет. В инете есть примеры. 4.Т.е. Вы не знаете Lua(qlua)? Начните с его изучения. Этот форум как раз этому посвящен.
1. Готово 2. Готово 3. Знаю только ПИТОН. ,(c++, c#, java) НЕ знаю 4. Вот это основная проблема! Читал кучу инфы но так и не допёр как сделать 5. С начала надо разобраться с пунктом 4 ))
3.Если знаете ПИТОН, то пишите на ПИТОНе. Разницы нет. В инете есть примеры. 4.Т.е. Вы не знаете Lua(qlua)? Начните с его изучения. Этот форум как раз этому посвящен.
Qlua я знаю. Не могу разобраться как отправить инфу из Quik на внешний скрипт на Питоне.
Игорь Б написал: Начните с самого простого варианта - через файл.txt. Дальше разберетесь по мере развития схемы
Думаю это оптимальный вариант для начала У вас есть примеры как это сделать ? )) Возникает вопрос как сообщить скрипту на Питоне что файл изменился. (как сигнал на отправку сообщения с текстом из файла)
Alex, Я думаю, это вечный костыль. Идея-то стандартная, ещё из прошлого тысячелетия, называется ОЗУДД (ОЗУ двойного доступа). Например, повесить какую-нить функцию на какой-нить вектор и программным прерыванием по этому вектору делай, что хошь. Но современные операционки уже настолько изуродованы, что кроме как через файл вряд ли что получится.
Владимир написал: Alex, Я думаю, это вечный костыль. Идея-то стандартная, ещё из прошлого тысячелетия, называется ОЗУДД (ОЗУ двойного доступа). Например, повесить какую-нить функцию на какой-нить вектор и программным прерыванием по этому вектору делай, что хошь. Но современные операционки уже настолько изуродованы, что кроме как через файл вряд ли что получится.
Через файл все работает супер, спасибо
Проблема только с записью русских букв в файл. io.wriite пишет в файл только латиницу , а кириллицу не пишет!!!
Владимир написал: Alex, Я думаю, это вечный костыль. Идея-то стандартная, ещё из прошлого тысячелетия, называется ОЗУДД (ОЗУ двойного доступа). Например, повесить какую-нить функцию на какой-нить вектор и программным прерыванием по этому вектору делай, что хошь. Но современные операционки уже настолько изуродованы, что кроме как через файл вряд ли что получится.
А как сделать обмен в обратном направлении? Из Питона в Квик Квик -> Питон все просто. watсhdog python отслеживает изменение файла. В qlua нет функции отслеживания изменения файла. Спс
А как сделать обмен в обратном направлении? Из Питона в Квик Квик -> Питон все просто. watсhdog python отслеживает изменение файла. В qlua нет функции отслеживания изменения файла. Спс
Ничего сложного. Открываете файл в режиме чтения и читаете его.
Все зависит от методики обмена, как Вы будете записывать информацию. Одна строка, несколько строк. Возможно надо написать свой итератор перебора строк.
Для примера, можно просто читать последнюю строку файла через:
Код
file:seek("end")
last_line = file:read('*l')
Если появится новая строка, то и при чтении она считается, т.к. директива *l - Reads the line from the current file position, and moves file position to next line.
А как сделать обмен в обратном направлении? Из Питона в Квик Квик -> Питон все просто. watсhdog python отслеживает изменение файла. В qlua нет функции отслеживания изменения файла. Спс
Ничего сложного. Открываете файл в режиме чтения и читаете его.
Все зависит от методики обмена, как Вы будете записывать информацию. Одна строка, несколько строк. Возможно надо написать свой итератор перебора строк.
Для примера, можно просто читать последнюю строку файла через:
Код
file:seek( "end" )
last_line = file:read( '*l' )
Если появится новая строка, то и при чтении она считается, т.к. директива *l - Reads the line from the current file position, and moves file position to next line.
Николай спасибо, попробую реализовать.. Остается вопрос как дать понять скрипту lua что в файл добавлена новая строка. Получается надо делать бесконечный цикл который постоянно читает файл и ищет в нем новую строку ?
Nikolay написал: В принципе да. Но проще всего это сделать через замыкание, тогда проще вызывать. Можно даже сделать таймер, чтобы не читать слишком часто
Если простыми словами - то это функция объект с своей областью видимости. Что дает возможность создавать разные экземпляры функции с своими переменными.
Таймер на любую функцию можно сделать так (пример на чистом lua):
Код
local timer_processor = function(delay)
delay = delay or 0
local last_time = 0
return function(func, ...)
local cur_time = os.time()
if cur_time - last_time >= delay then
last_time = cur_time
return func(...)
end
return ...
end
end
local some_func = function(x)
x = x + 1
print(x)
return x
end
local timer = timer_processor(2)
local a = 1
while a < 5 do
a = timer(some_func, a)
end
Функция some_func вызывается постоянно, но исполняется только каждые 2 секунды - параметр delay. При этом можно создавать несколько таймеров на разные задержки, используя один и тот же конструктор.
Можно также просто сделать некую функцию, в Вашем случае читающую файл, внутри замыкания, а не передавать ее как аргумент.
Nikolay написал: Если простыми словами - то это функция объект с своей областью видимости. Что дает возможность создавать разные экземпляры функции с своими переменными.
А если совсем по-простому, то это модуль, сохраняющий свое состояние (историю своего запуска) между своими запусками на исполнение.
Заинтриговали, глянул в Вики, чо там за "замыкания" нарисовались. Господи, какая же чушь!
Цитата
Замыкание (англ. closure) в программировании — функция первого класса (!), в теле которой присутствуют ссылки на переменные, объявленные вне тела этой функции в окружающем коде и не являющиеся её параметрами. Говоря другим языком, замыкание — функция, которая ссылается на свободные переменные в своей области видимости.
И "видимостью" своей затрахали - даже несчастный goto теперь ни хрена не видит.
Цитата
Замыкание — это особый вид функции. Она определена в теле другой функции и создаётся каждый раз во время её выполнения (!!!). Лексические переменные замыкания отличаются от глобальных переменных тем, что они не занимают глобальное пространство имён. От переменных в объектах они отличаются тем, что привязаны к функциям, а не объектам.
Читал и ржал. Ещё лет 20 назад я говорил, что "указатель на структуру покрывает все "классовые" потуги Страуструпа как бык овцу". Надо же умудриться на ровном месте наковырять себе столько проблем! Причём ВЕЧНЫХ проблем!
Они же просто переопределяют стандартный ввод и вывод. Как минимум надо иметь уже открытый хэндл, на который переопределять, что сводится к задаче где его взять, которая в общем тут и обсуждается.