Получение подтаблицы в отдельную таблицк

Страницы: 1
RSS
Получение подтаблицы в отдельную таблицк
 
Есть таблица вида

local ind =
{
["Si"] =
{
ind_sub = "si_vol",
need_volume = 10
},
["Ri"] =
{
ind_sub = "ri_vol",
need_volume = 10
}
}

Надо пройтись по ней циклом, и получить в переменной подтаблицу, соответственно Si и Ri.
Как это можно реализовать?
Такая конструкция нифига не работает
for i,tab_data in ipairs(ind) do
 
Цитата
Виктор написал:
в переменной подтаблицу, соответственно Si и Ri.

В переменную две подтаблицы Si и Ri ? или как надо?
Я не понял.
 
Виктор, Задавайте имена полей таблиц как натуральные числа и не мучайтесь. У меня весь скрипт так построен - и нет проблем. Вот, например, оператор аж из двойного цикла:
if a[i][8][j]~=0 then k=CF[a[i][9][j]+5];
 
Если это не массив, то необходимо использовать другой итератор pairs. ipairs только для непрерывных массивов.

for i,tab_data in pairs(ind) do
 
Цитата
swerg написал:
Цитата
Виктор написал:
в переменной подтаблицу, соответственно Si и Ri.

В переменную две подтаблицы Si и Ri ? или как надо?
Я не понял.
одну. в цикле перебираю ind,
в переменную сначала си, потом ри.
Чтобы их уже в свою очередь разобрать. Цель:иметь возможность быстро добавить другой символ без переделки и утяжеления скрипта
 
Цитата
Nikolay написал:
Если это не массив, то необходимо использовать другой итератор pairs. ipairs только для непрерывных массивов.

for i,tab_data in pairs(ind) do
Большое спасибо, получилось разобрать таблицу
 
Цитата
Владимир написал:
Виктор, Задавайте имена полей таблиц как натуральные числа и не мучайтесь. У меня весь скрипт так построен - и нет проблем. Вот, например, оператор аж из двойного цикла:
if a[8][j]~=0 then k=CF[a[9][j]+5];
И вам спасибо, точно же, он со строками даже число элементов не возвращает.
В итоге получился алерт на объемы, неидеальный, но пока пойдет
Код
--скрипт надо сохранить в кодировке Windows-1251, иначе будут кракозябры
require "bot4sale64" --надо скачать и вставить в папку со скриптом, или удалить строку, но тогда звука не будет
local ind =
{
   [1] =
   {
      ind_sub = "si_vol", --идентификатор отслеживаемого графика. Проставляется в настройках графика.
      need_volume = 10    --требуемый объем выше которого будет сигнал
   },                          --не забыть запятую после вставки еще одного блока
   [2] =
   {
      ind_sub = "ri_vol",
      need_volume = 10
   } 
}
was_alert = {ind = ""}


IsRun = true
function main()
while IsRun do

   for i,tab_data in pairs(ind) do
      true_alert = true   
      candles = getNumCandles(tab_data.ind_sub);
      tab, n, l = getCandlesByIndex (tab_data.ind_sub, 0, candles-1,1)
      local O = tab[0].open; -- Получить значение Open для указанной свечи (цена открытия свечи)
      local V = tab[0].volume; -- Получить значение Volume для указанной свечи (объем сделок в свече)
            if V>tab_data.need_volume then 
               msg_alert = string.format("Повышенные объемы:%d;Символ:%s;цена открытия:%s",V,tab_data.ind_sub,O)
         
               for i,alert_data in ipairs(was_alert) do --проверка на то, был ли уже такой алерт, чтобы повторно не срабатывало
               if alert_data == msg_alert then 
                  true_alert = false 
                  break
                  end
               
            end
            if true_alert == true then
               bot4sale64.PlaySound("Ахтунг.wav") --прописать свой звуковой файл и положить его в папку со скриптом
               message(msg_alert,1)
               table.insert(was_alert,msg_alert)
               end
            
            end
         
         
      
      if #was_alert>(#ind*60) then            --блок очистки памяти, так как этот список будет постоянно пополняться
         while #was_alert~=#ind*60 do
               table.remove(was_alert, 1)
         end
      end
   end
end
sleep(1000);                                             --задержка между проверками в милисекундах
end


function OnStop()
   IsRun = false;
end


Страницы: 1
Читают тему
Наверх