Функция возвращает код класса по коду инструмента

Страницы: 1
RSS
Функция возвращает код класса по коду инструмента
 
Код
function GetClassBySec(code) -- Функция возвращает код класса по коду инструмента
   --------------------------------------------------------------------------------------------------------------------------
   for class in string_gmatch("STOCK_USA,SPBXM,FQBR,TQBR,QJSIM,SPBFUT,", "(%P*),") do
      for sec in string_gmatch(getClassSecurities(class), "(%P*_*%P*_*%P*),") do
         if sec == code then return class end
      end
   end
   --------------------------------------------------------------------------------------------------------------------------
end

Здравствуйте. Функция не возвращает код класса: "STOCK_USA" и "FQBR" ("SPBXM" - не проверял). В чем подвох?

 
Здравствуйте!

Проблема заключается в том, что функция string_gmatch(getClassSecurities(class), "(%P*_*%P*_*%P*),") с данным регулярным выражением некорректно получает коды инструментов, содержащие в себе символы пунктуации (например "-", именно такие коды инструментов в классе "FQBR"). Это приводит к тому, что хоть в классе и есть инструмент с кодом, отправленным в главную функцию, она его там не находит.

Такая же ситуация и с string_gmatch("STOCK_USA,SPBXM,FQBR,TQBR,QJSIM,SPBFUT,", "(%P*),"), с данным регулярным выражением вместо "STOCK_USA", функция найдет "USA".

Рекомендуем переписать регулярные выражения с учетом всех необходимых типов кодов инструментов, класс которых планируется
       определять в первом случае, и всех классов, из которых планируется выбор во втором.
 
Спасибо
 
<code>
function getClassTicker2 (ticker) -- Функция возвращает таблицу кодов классов по тикеру инструмента
 local tbl = {}
 ---  !!! Некоторые тикеры попадают в несколько классов ---
 ----   !!  Таблица securities не  отсортирована по тикерам . Поэтому полный перебор ----
  for i= 0, getNumberOf("securities") - 1 do
   local item = getItem("securities", i)
       if item.code == ticker then
           tbl [#tbl +1]  = item.class_code
       end
 end
 return tbl
end
<code>
 
Вот так работает
Код
function GetClassBySec(code) -- Функция возвращает код класса по коду инструмента
   --------------------------------------------------------------------------------------------------------------------------
   for class in string_gmatch("STOCK_USA,SPBXM,FQBR,TQBR,QJSIM,SPBFUT,", "(%P*_*%P*),") do
      for sec in string_gmatch(getClassSecurities(class), "(%P*%.*%P*-*%P*),") do
         if sec == code then return class end
      end
   end
   --------------------------------------------------------------------------------------------------------------------------
end
Страницы: 1
Читают тему
Наверх