в чем ошибка в коде?

Страницы: 1
RSS
в чем ошибка в коде?, просмотр таблицы заявок
 
Пытаюсь вывести в отладочное окно некоторые поля таблицы заявок, но подстановка не работает, можете подсказать в чем ошибка?
Код
PrintDbgStr(" Просмотр полей таблицы заявок")   
params = {"order_num", "flags", "sec_code"}
         for i=0,getNumberOf('orders')-1 do 
       PrintDbgStr(i)
            local order = getItem('orders', i); 
         for key,v in ipairs(params) do
            PrintDbgStr(v .. " = " .. order.v)
         end
      end
аналогичный пример взял из справки для функции getInfoParam(), там немного иная подстановка и все работает
Код
params = {"VERSION", "TRADEDATE", "SERVERTIME"}
    
    for key,v in ipairs(params) do
       PrintDbgStr(v .. " = " .. getInfoParam(v).."\n")
   
    end
, а мое не хочет?
человек (не робот)
 
Андрей,
Так нельзя делать.
Сделайте так:
Код
   PrintDbgStr(" Просмотр полей таблицы заявок")   
   params = {"order_num", "flags", "sec_code"}
   for i=0,getNumberOf('orders')-1 do 
      PrintDbgStr(i)
      local order = getItem('orders', i); 
      for key,v in ipairs(params) do
         PrintDbgStr(v .. " = " .. order.[v])
      end
   end
 
Цитата
Sergey Gorokhov написал:
Сделайте так:
Спасибо огромное!, так короче будет код
человек (не робот)
 
Почему не выводятся данные можете сказать?, кстати подстановка в квадратных скобках в данном случае не работает, пишет сообщение об ошибке, а если выводить параметр подстановки v без скобок, то вообще ничего не выводится, вернее с другим кодом выводится, а именно этот пустой, код и ошибка ниже
Код
--ДОБАВЛЕНИЕ ДАННЫХ В ТАБЛИЦУ Позиции по клиентским счетам
PrintDbgStr("Позиции по клиентским счетам (фьючерсы) из таблицы")
params = {"startbuy","startsell","startnet","todaybuy","todaysell","totalnet","openbuys","opensells","cbplused","cbplplanned"}
    
    for key,v in ipairs(params) do
          PrintDbgStr(v .. " = " .. getFuturesHolding('SPBFUT000000','SPBFUT000pf','SRH9','1').v)
   --PrintDbgStr(v .. " = " .. getFuturesHolding('SPBFUT000000','SPBFUT000pf','SRH9','1').[v])
    end

вот ошибка с квадратными скобками
Код
Syntax error while compiling C:\Program Files\QUIK-Junior\LuaIndicators\k12_8.lua: C:\Program Files\QUIK-Junior\LuaIndicators\k12_8.lua:95: '<name>' expected near '['

А другой код где последовательно прописываю все поля нормально выводит, но его очень долго писать, в цикле быстрее получилось бы)
Код
[4680] сделка из таблицы
[4680] сист дата и время      заявка   сделка    флаг    бум лот цена сумм    транз    сост   напр    дата и время сделки
[4680] *0 27.12.2018 11:55:30 82958504 10251485 001000000 SRH9 1 18941 18941 2147483647 исполн покупка 27.12.2018 11:54:33 166000
[4680] Позиции по клиентским счетам (фьючерсы) из таблицы
Хотя это не так и важно, долго писать не долго, но интересно почему не работает?

человек (не робот)
 
И упрощенный вариант не работает, может в синтаксисе что то не так?
Код
PrintDbgStr("***"..getFuturesHolding('SPBFUT000000','SPBFUT000pf','SRH9','1').'cbplplanned')
человек (не робот)
 
Цитата
Андрей написал:
может в синтаксисе что то не так?
Давайте еще раз.
Если Вы передаете параметр таблицы в виде строки то его надо взять в квадратные скобки [] ровно как это уже было показано на примере:
Цитата
Sergey Gorokhov написал:
        PrintDbgStr(v .. " = " .. order.[v])

Если Вы передаете параметр не в виде строки а как имя параметра, то его надо указывать БЕЗ скобок и БЕЗ кавычек.
например:
getFuturesHolding('SPBFUT000000','SPBFUT000pf','SRH9','1').cbplplanned
 
Цитата
Sergey Gorokhov написал:
Если Вы передаете параметр таблицы в виде строки  то его надо взять в квадратные скобки []
И в этом случае без точки
Цитата
Sergey Gorokhov написал:
        PrintDbgStr(v .. " = " .. order[v])
 
Цитата
Sergey Gorokhov написал:
Если Вы передаете параметр не в виде строки  а как имя параметра
спасибо большое!
человек (не робот)
 
Цитата
Sergey Gorokhov написал:
Сделайте так:
Код
  
   params  =  {"order_num",  "flags" ,  "sec_code" }
   ...
       for  key,v  in  ipairs(params)  do 
          PrintDbgStr (v  ..   " = "   ..  order.[v])
       end 
  
Так тоже делать не надо, т.к. здесь у Сергея ошибочно точка попала перед квадратными скобками.
 
Цитата
Андрей написал:
И упрощенный вариант не работает, может в синтаксисе что то не так?
Код
   PrintDbgStr ( "***"  ..  getFuturesHolding ( 'SPBFUT000000' ,'SPBFUT000pf','SRH9',' 1 ').'cbplplanned')
  
Конечно, не так.
 
Вот как можно делать с key-value таблицами Lua, когда key - это строка:
Код
local key = "TheKey"
local t = { key = "value" }

print( t[key] ) -- 1ый вариант, через квадратные скобки, используя имя ключа

print( t.TheKey ) -- 2ой вариант, через точку, используя сам ключ


 
Все варианту тут: https://www.lua.org/manual/5.1/manual.html#2.5.7
При этом у 2ого варианта есть ограничения:
  строка не должна начинаться с цифр и содержать спец.символы, кроме '_'.
 
Цитата
vgi написал:
Вот как можно делать с key-value таблицами Lua, когда key - это строка:
Код
local  key = "TheKey" 
local  t  =  { key = "value" }
print ( t[key] )  -- 1ый вариант, через квадратные скобки, используя имя ключа 
print ( t.TheKey )  -- 2ой вариант, через точку, используя сам ключ 

Во втрой строке должно быть естественно
Код
local t = { [key] = "value" }
-- или
local t = { TheKey = "value" }
 
Цитата
vgi написал:
Во втрой строке должно быть естественно
Спасибо за все поправки и подстановки, очень полезная информация, последний ваш ответ я даже пока не знаю где можно применять(пусть будет в запас), а предыдущие сейчас все попробую. Еще тогда уж разрешите вопрос, что бы все было прозрачно что пока не ясно:
Код
local Transaction={
    ['TRANS_ID']   = '271333',   
    ['ACCOUNT']    = 'SPBFUT000pf',           
   ['CLASSCODE']  = 'SPBFUT',
    ['SECCODE']    = 'SRH9',             
    ['ACTION']     = 'NEW_STOP_ORDER',          
    ['OPERATION']  = 'S',                 
    ['TYPE']       = 'L',                 
    ['QUANTITY']   = '1',                 
   ['PRICE']      = '1800',  
   ['STOPPRICE']  = '1810', -- условие срабатывания заявки
   ['EXPIRY_DATE']='20110519'
  }

как правильно записывать переменные для подстановки в транзакцию по цене (numeric) и текстовые переменные (string) , так правильно?
Код
local cena=tostring(1800)
local bumaga='SRH9'
...
['PRICE']      = cena,  
['SECCODE']    = bumaga,  
...
человек (не робот)
 
все работает, спасибо всем за помощь)
Код
params = {"startbuy","startsell","startnet","todaybuy","todaysell","totalnet","session_status"}
    for key,v in ipairs(params) do
        local totalnet = getFuturesHolding('SPBFUT000000','SPBFUT000pf','SRH9', 0)[v]
       if totalnet~=nil then
         PrintDbgStr(v.." = "..totalnet)
       end       
    end
человек (не робот)
Страницы: 1
Читают тему
Наверх