Ошибки, баги, вопросы - страница 3204

 
Andy #:
Так дело в том, что заморозился весь терминал и не реагировал ни на какие нажатия, а затем само все отпустило?!

i-Терминалы - не думаю, что статистика их использования мотивирует разработчиков.

 
Хотя у них самих тоже есть Макбук на чипе Apple M1 и можно проверить работу МТ5 на нем. 
 
Andy могло быть так, приложение зависло... в этот момент дебаггер сделал дамп памяти програмки, сохранил его потом, и отправил в саппорт 
 

Это да. Но вопрос в том, что это происходит именно на пике активности котировок - два раза подряд. На спокойном рынке не виснет.

Пара EUR/USD, таймфрейм М15, причем сам Макбук не завис и никаких сообщений об ошибке не было.

 


явная опечатка платежи заканчивается на И , а тут на Ы..

я даже проверил в яндексе на случай, а вдруг не знаю свой язык и оказалось я не ошибся)
 

Подскажите кто знает низкоуровневый способ, как из строки получить целое значение. 
Длина строки, не подходит. Виду возможных совпадений.
Простыми словами, необходимо в switch передать тип string 

string str = "xxxxx_xxxx";

??? x = StringToNumber(str);

switch(x) 
{ 
   case ???: 
      break; 
}

Конструкция if/else для преобразования, не рассматривается.
Нужен именно switch с быстрым доступом.

Думал строку "xxxxx_xxxx" преобразовать в бинарную строку, и из неё уже получить  Decimal значение.
Но значение получается слишком большое 568906268053835766855800
Какие возможны варианты на низком уровне?
 

 
Roman #:

Подскажите кто знает низкоуровневый способ, как из строки получить целое значение. 
Длина строки, не подходит. Виду возможных совпадений.
Простыми словами, необходимо в switch передать тип string 

Конструкция if/else для преобразования, не рассматривается.
Нужен именно switch с быстрым доступом.

Думал строку "xxxxx_xxxx" преобразовать в бинарную строку, и из неё уже получить  Decimal значение.
Но значение получается слишком большое 568906268053835766855800
Какие возможны варианты на низком уровне?
 

Чем StringToInteger не устраивает?
А вообще меняйте логику. 
Не должно быть таких затратных преобразований.
Номер в стринге должен оказаться только для вывода.
 
Roman #:

Подскажите кто знает низкоуровневый способ, как из строки получить целое значение. 
Длина строки, не подходит. Виду возможных совпадений.
Простыми словами, необходимо в switch передать тип string 

Конструкция if/else для преобразования, не рассматривается.
Нужен именно switch с быстрым доступом.

Думал строку "xxxxx_xxxx" преобразовать в бинарную строку, и из неё уже получить  Decimal значение.
Но значение получается слишком большое 568906268053835766855800
Какие возможны варианты на низком уровне?
 

Может как-нибудь так? Но я бы прогнал все варианты текста на предмет совпадений, на всякий случай...

void OnStart()
  {
   Print(StringToNumber("ABCED_ABCD"));
   Print(StringToNumber("ABCDE_ABCD"));
   Print(StringToNumber("ABDCE_ABCD"));   
  }

uint StringToNumber(const string _s)
  {
   uchar array[];
   uint h=0;

   uint n=StringToCharArray(_s, array);
   for(uint i=0; i<n; i++)
     {
      h = 31*h+array[i];
     }

   return(h/n);
  }

Добавлено: замер скорости нужен...

Вообще задумался сильно... Когда прилетает новый стакан, нужно быстро передать этот стакан "кому нужно" - классу который работает с этим символом.

У меня сейчас перебор со сравнением string.

Если преобразовать string в целое и сравнивать уже его - возможно будет быстрее. Проверю отпишу...

 
Nikolai Semko #:
Чем StringToInteger не устраивает?
А вообще меняйте логику. 
Не должно быть таких затратных преобразований.
Номер в стринге должен оказаться только для вывода.

StringToInteger преобразовывает только строку которая содержит число "12345"
Вот и ищу недорогой способ, как строку передать в switch.
Можно было ограничится if/else, но хотел уйти от этой конструкции, так как сравнение строк затратное дело.
А если конструкция  if/else  будет на 10 уровней или более, то это равно количеству сравнений, пока не встретится истина.

if(event == str1)
...
else if(event == str2)
...
и т.д.

Вот и хочу как-то избежать этих сравнений, через преобразование на низком уровне.

 
Andrey Miguzov #:

Может как-нибудь так? Но я бы прогнал все варианты текста на предмет совпадений, на всякий случай...

Добавлено: замер скорости нужен...

Вообще задумался сильно... Когда прилетает новый стакан, нужно быстро передать этот стакан "кому нужно" - классу который работает с этим символом.

У меня сейчас перебор со сравнением string.

Если преобразовать string в целое и сравнивать уже его - возможно будет быстрее. Проверю отпишу...

Спасибо, интересный вариант.
Да задача полезная, особенно когда читаешь поток строк.
Поэтому нужен хардкор на низком уровне.
Но не соображу.