Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Интересует активность в Маркете? Заходи и отслеживай!
Sergey Guliaev
2304
Sergey Guliaev 2012.11.20 07:27 

Уважаемые господа разработчики.

Возникла необходимость выяснить максимальную длину имени GV-переменной, для этого я написал небольшую тестовую программку:

//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                             Copyright © 2012 valenok2003@mail.ru |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012 valenok2003@mail.ru"
#property link      ""

int Cnt;
string Txt;   
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init(){
//----
   Cnt = 1;  
   Txt = "a"; // латиница
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit(){
//----
   GlobalVariablesDeleteAll("a");
//----
   return(0);
}
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start(){
//----
   bool ALARM = false;
   for(int i=0; i<100; i++){
      if(GlobalVariableSet(Txt,Cnt)==0){
         ALARM = true; 
         break;
      }
      Txt = Txt+"a";
      Cnt++; 
   }  
   if(ALARM)Alert("всего символов " + Cnt);
//----
   return(0);
}
//+------------------------------------------------------------------+
//+-------

я получил след результат

 

через некоторое время

 

то есть, не происходит обработка ошибки превышения длины имени GV-переменной, поскольку алерт так и не был выдан,

после превышения длины имена интерпретируются как одно и тоже, поскольку до значения 62 переменные переписываются, а последняя строка почему-то нарастает, 

и кроме того, последняя переменная  не удаляется вручную, а только программно при помощи функции  GlobalVariablesDeleteAll("a");

Прошу вас дать разъяснения по этому поводу
 

Mislaid
620
Mislaid 2012.11.20 10:50  

Бросая в воду камешки, смотри на круги, ими образуемые; иначе такое бросание будет пустою забавою. (Козьма Прутков)

Посмотрел скрипт.  Небольшие модификации позволяют установить следующее:

длина имени глобальной переменной от 0 до 63 символов.  Длинные строки обрезаются до 63 символов. Глобальные переменные с длиной имени 0 и 63 символа, действительно,  ручками не удаляются.

Sergey Guliaev
2304
Sergey Guliaev 2012.11.20 18:29  
Mislaid:

Бросая в воду камешки, смотри на круги, ими образуемые; иначе такое бросание будет пустою забавою. (Козьма Прутков)

Посмотрел скрипт.  Небольшие модификации позволяют установить следующее:

длина имени глобальной переменной от 0 до 63 символов.  Длинные строки обрезаются до 63 символов. Глобальные переменные с длиной имени 0 и 63 символа, действительно,  ручками не удаляются.

 


Что интересно пустое имя "" тоже принимается терминалом. И почему 63, а не 64?
Комбинатор
15669
Комбинатор 2012.11.20 18:35  

Один символ отводится под завершающий /0

valenok2003:

и кроме того, последняя переменная  не удаляется вручную, а только программно при помощи функции  GlobalVariablesDeleteAll("a");
Прошу вас дать разъяснения по этому поводу

А вот это смахивает на баг ) надо на 5ке проверить.

Sergey Guliaev
2304
Sergey Guliaev 2012.11.20 18:56  
TheXpert:

Один символ отводится под завершающий /0

А вот это смахивает на баг ) надо на 5ке проверить.

Гораздо хуже ИМХО, что при создании имени длиннее 63 не выдает ошибку создания переменной. Какие же ошибки тогда обрабатываются?
Комбинатор
15669
Комбинатор 2012.11.20 19:00  
valenok2003:
Гораздо хуже ИМХО, что при создании имении длиннее 63 не выдает ошибку создания переменной

Ну... Я уже привык как-то.

На граф объекты такое же ограничение если что. И текстовые поля для объектов тоже.

Но вот выделенное мной выше... Этот баг имхо, гораздо хуже. Его по сокращенному имени и программно не удалишь по ходу.

Sergey Guliaev
2304
Sergey Guliaev 2012.11.20 19:04  
TheXpert:

Ну... Я уже привык как-то.

На граф объекты такое же ограничение если что. И текстовые поля для объектов тоже.

Но вот выделенное мной выше... Этот баг имхо, гораздо хуже. Его по сокращенному имени и программно не удалишь по ходу.



В моём примере программно удаляется по сокращенному имени. deinit благополучно отрабатывает.
Комбинатор
15669
Комбинатор 2012.11.20 19:10  
valenok2003:
В моём примере программно удаляется по сокращенному имени. deinit благополучно отрабатывает.
В твоем примере есть GlobalVariablesDeleteAll ) поименного удаления нет.
Sergey Guliaev
2304
Sergey Guliaev 2012.11.20 19:13  
TheXpert:
В твоем примере есть GlobalVariablesDeleteAll ) поименного удаления нет.


Ну да - удалить всё по префиксу работает. А по полному имени - даже и не знаю что будет.
Sergey Guliaev
2304
Sergey Guliaev 2012.11.22 08:22  
Молчат разработчики. Пятым все заняты...
Fedor
2763
Fedor 2012.11.22 12:43  
Интересно, каково состояние с GV на самом деле? По отсутствию вопросов по работе с GV (на форуме вообще) складывается впечатление, что либо "не всякая птица долетит...", либо, приходя к работе с GV, "приходящие" автоматически становятся специалистами "по работе с базам данных"... По-моему, ветка типа "Примеры работы с GV", должна быть востребована не менее, чем "Кимовские функции". Есть мнения? 
/ /12
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий