Как очистить данные в setCell

Страницы: 1
RSS
Как очистить данные в setCell, Как очистить данные в setCell по условию и как правильно прочитать данные из getClassSecurities("SPBFUT"),используя getParamEx.На ум приходить только {"RIM0","SiM0"}
 
Вопрос больше пока по первой части..Я создаю таблицу,получаю данные с помощью  getParamEx.Пытаюсь сделать условие,что если условие верно,то в таблице отображается инструмент,если нет,то заполнить поля nil.Но когда условие срабатывает я не получаю пустую таблицу..А таблица просто замораживается,пока вновь условие не станет верным.Не знаю как правильно удалить инструмент и очистить таблицу.
 
IsRun = true
class_code="SPBFUT"
sec_list = getClassSecurities("SPBFUT")


function main()
  -- Получает доступный id для создания
  t_id = AllocTable()  
 
  -- добавить столбцы
  AddColumn(t_id, 1, "Код",       true, QTABLE_STRING_TYPE, 20)
  AddColumn(t_id, 2, "BID", true, QTABLE_DOUBLE_TYPE,   14)
  AddColumn(t_id, 3, "ASK", true, QTABLE_DOUBLE_TYPE,   14)
  AddColumn(t_id, 4, "Цена последняя", true, QTABLE_DOUBLE_TYPE,   14)
  AddColumn(t_id, 5, "Время", true, QTABLE_DOUBLE_TYPE,   14)
  AddColumn(t_id, 6, "Разница, р",   true, QTABLE_DOUBLE_TYPE,   14)
  AddColumn(t_id, 7, "Разница, %",   true, QTABLE_DOUBLE_TYPE, 14)

  t = CreateWindow(t_id)


   

  local rows, columns = GetTableSize (t_id)
  InsertRow(t_id, rows) -- добавить новую строку вниз таблицы для "Итого"
 
  SetWindowCaption(t_id, "Опционы")

  -- исполнять цикл, пока пользователь не остановит скрипт или не закроет окно таблицы
  while IsRun do
     if IsWindowClosed(t_id)==true then
        IsRun=false
     end

     local currentPrice=0
 local lastPrice=0
 local bid = 0
 local ask = 0
     local profitPerc = 0
     local currentSecCode= ""
     local fullNameOfInstrument = ""
     local rowInPortfolioTable = {}    -- строка из таблицы "Лимиты по бумагам"
     local tableInstrument = {}    -- данные "Таблицы текущих торгов"
     local iRowInOutTable = 1
 local razn = 0
 local raznPercent = 0
   


  fullNameOfInstrument = (getParamEx(class_code, sec_list, "SHORTNAME").param_image or "0") --"LONGNAME"                    
  bid = (getParamEx(class_code, sec_list, "BID").param_value or 0 )
  ask = (getParamEx(class_code, sec_list, "OFFER").param_value or 0)
  lastPrice = (getParamEx(class_code, sec_list, "LAST").param_value)
  timepos = (getParamEx(class_code, sec_list, "TIME").param_image)
 
   razn = ask - bid                                                          
  raznPercent   = 100*razn/ ask

   SetCell(t_id, iRowInOutTable, 1, fullNameOfInstrument) -- "Бумага"
SetCell(t_id, iRowInOutTable, 2, tostring(math_round(bid))) -- "Кол-во"RemoveZero(tostring(qtyBoughtLots)))
SetCell(t_id, iRowInOutTable, 3, tostring(math_round(ask)))  -- tostring(avgPrice))   -- "Цена покупки"
SetCell(t_id, iRowInOutTable, 4, tostring(math_round(lastPrice)))   -- "Цена текущая"
SetCell(t_id, iRowInOutTable, 5, timepos)   -- "Цена текущая"
SetCell(t_id, iRowInOutTable, 6, tostring(razn)) -- "Прибыль, %"
SetCell(t_id, iRowInOutTable, 7, tostring(raznPercent) .."%") -- "Прибыль, %"



if (raznPercent > 0.5 ) or(raznPercent <-0.5) then

SetCell(t_id, iRowInOutTable, 1, fullNameOfInstrument==nil) -- "Бумага"
SetCell(t_id, iRowInOutTable, 2, bid==nil) -- "Кол-во"RemoveZero(tostring(qtyBoughtLots)))
SetCell(t_id, iRowInOutTable, 3, ask==nil)  -- tostring(avgPrice))   -- "Цена покупки"
SetCell(t_id, iRowInOutTable, 4, lastPrice==nil)   -- "Цена текущая"
SetCell(t_id, iRowInOutTable, 5, timepos==nil)   -- "Цена текущая"
SetCell(t_id, iRowInOutTable, 6, razn==nil) -- "Прибыль, %"
SetCell(t_id, iRowInOutTable, 7, raznPercent==nil) -- "Прибыль, %"


end
           
if raznPercent > 5 then       -- окрашиваем
  ColourRowInGreen(iRowInOutTable)
 
elseif raznPercent<-5 then
 ColourRowInRed(iRowInOutTable)  

else
  ColourRowInYellow(iRowInOutTable)
end  
          iRowInOutTable = iRowInOutTable+1

    sleep(500) -- пауза  сек.
    end
--end
  --message("script table portfolio finished")
end


function ColourRowInRed(num_row)
  SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(255,150,150), RGB(0,0,0), RGB(255,150,150), RGB(0,0,0))
end
function ColourRowInYellow(num_row)
  SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(255,255,200), RGB(0,0,0), RGB(255,255,200), RGB(0,0,0))
end
function ColourRowInGreen(num_row)
  SetColor(t_id, num_row, QTABLE_NO_INDEX, RGB(150,255,150), RGB(0,0,0), RGB(150,255,150), RGB(0,0,0))
end

-- Округляет число до указанной точности
function math_round (num, idp)
  local mult = 10^(idp or 0)
  return math.floor(num * mult + 0.5) / mult
end
-- удаление точки и нулей после нее
function RemoveZero(str)
  while (string.sub(str,-1) == "0" and str ~= "0") do
     str = string.sub(str,1,-2)
  end
  if (string.sub(str,-1) == ".") then
     str = string.sub(str,1,-2)
  end  
  return str
end
function OnStop()
  DestroyTable(t_id)
  IsRun = false  
end
 
Здравствуйте,
Для очистки значения в ячейке, нужно передать ему пустое значение соответствующее типу данных.
Для строковых типов, пустым является "", для числовых 0.
Пример:
SetCell(t_id, row, 1, "")
SetCell(t_id, row, 2, tostring(""),0)
 
Здравствуйте..Спасибо..Я вроде пытался так сделать,но не получалось..А если я использую массив,могу я удалить,который не проходит по условию,чтобы значения очистились??Например я хочу использовать getClassSecurities,чтобы все инструменты класса проверялись по условию,и ненужные отбраковывались??Как такое можно сделать??И можно ли вообще??Совсем,не против,если посоветуете что почитать или ознакомиться по этой теме))
 
psih,

Вопрос не понятен.
Вы хотите удалить строку в GUI таблице? (тут речь про таблицу которую Вы видите глазами в терминале)
Или удалить значение из массива? (тут речь НЕ про визуальную таблицу, а про Lua таблицы table)
Или удалить значение из середины строки? (getClassSecurities ведь возвращает строку)
 
Спасибо..Всё получилось..Странно,что раньше так не получалось..Точно пробовал с пустыми кавычками..
 
В идеале,я хочу чтобы полученная строка getClassSecurities подставяла  значения класса в таблицу setCell,а которые не проходят по условию,в неё не попадают.Наверное нужно использовать for для этих целей,чтобы каждый инструмент перебирался..Сначала наверное нужно разделить строку getClassSecurities??.Не совсем глубоки познания в языке..
 
psih,

Если вопрос в том как строку разбить по частям и перебрать эти части по очереди, то используйте следующий цикл:
Код
      for sec_code in string.gmatch(sec_list, "([^,]+)") do --перебираем инструменты по очереди.

      end   
 
Спасибо большое,помогли..
 
Здравствуйте!!А такой момент..После использования данного цикла перебора строки,у меня в созданной таблице так и остаётся одна строка,просто инструменты в ней перебираются..А как добавить всю строку с инструментами в таблицу??Чтобы созданная таблица расширялась вниз в зависимости от количества инструментов?
 
InsertRow(t_id, -1)
 
Цитата
Sergey Gorokhov написал:
InsertRow(t_id, -1)
Так он добавляет новые столбцы в таблицу.А надо чтобы он перезаписывал данные.Чем можно воспользоваться??Например делаешь условие и таблица постоянно растёт.
 
psih,
Вы ошибаетесь, функция НЕ добавляет новые столбцы.
Она добавляет новые строки.
Судя по Вашему изначальному вопросу ровно это Вам и надо, разве нет?
 
Цитата
Sergey Gorokhov написал:
psih,
Вы ошибаетесь, функция НЕ добавляет новые столбцы.
Она добавляет новые строки.
Судя по Вашему изначальному вопросу ровно это Вам и надо, разве нет?
не совсем))У меня изначально была таблица,из которой я не мог убрать значения,очистить её..Но спасибо за помощь)
Страницы: 1
Читают тему
Наверх