помогите с кусочком кода. что, тут, не так?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
koko_moko
365
koko_moko  
void OnDeinit(const int reason)      
   { 
      string z[4];                           //-- массив результатов со строками 
      ushort sep=StringGetCharacter(" ",0);  //--- получим код разделителя 
      int obj_total=ObjectsTotal(0,0);       
      for(int i;i<obj_total;i++) 
          { StringSplit(ObjectName(i),sep,z); Print(i,">>>", obj_total); if (z[0]=="NAME") {ObjectDelete(ObjectName(i));}    }    
     
      EventKillTimer(); //--- destroy timer
   }                            


провел 4 часа в экспериментах. узнал что удаляется ровно половина обьектов. а потом 2017.08.07 00:50:10.218 _T+copy EURUSD,M5: array out of range in '_T+copy.mq4' (31,79)

хочу разобраться где проблема
Sofiia Butenko
14248
Sofiia Butenko  
koko_moko:


провел 4 часа в экспериментах. узнал что удаляется ровно половина обьектов. а потом 2017.08.07 00:50:10.218 _T+copy EURUSD,M5: array out of range in '_T+copy.mq4' (31,79)

хочу разобраться где проблема

1) См.строчку 31

2) Считайте с конца

for(int i;i<obj_total;i++)  

for(int i=total-1;i>=0;i--)  

Вы удалением меняете порядок объектов

3) Не инициализировать переменные - очень плохая примета (см. счетчик) 

------

И зачем вообще перебирать объекты? Можно задавать заранее единый префикс и потом удалить одной строчкой - ObjectsDeleteAll 

koko_moko
365
koko_moko  
Galina Bobro:

1) См.строчку 31   --- выделил в коде к чему относится ошибка

2) Считайте с конца --- пробую/ РАБОТАЕТ!!! хоть и не понимаю зачем -1, но без него не работает.

for(int i;i<obj_total;i++)  

for(int i=total-1;i>=0;i--)  

Вы удалением меняете порядок объектов  ---хммм....даже и представить не мог такое, спасибо

3) Не инициализировать переменные - очень плохая примета (см. счетчик)   ---- не понял 

4) И что находится в массиве z также загадка...    --- там имя обьектов разбитое разделителем.  "прогаваська версия четыре". в ячейках каждое слово по порядку


СПАСИБО!!))

"И зачем вообще перебирать объекты? Можно задавать заранее единый префикс и потом удалить одной строчкой - ObjectsDeleteAll "

что за чертовщина !!?!? давно обновили эту ф-цию ???? заглянул в справку и никогда такого не видел, что б префикс .... извините. спасибо!

Maxim Kuznetsov
13580
Maxim Kuznetsov  
koko_moko:


провел 4 часа в экспериментах. узнал что удаляется ровно половина обьектов. а потом 2017.08.07 00:50:10.218 _T+copy EURUSD,M5: array out of range in '_T+copy.mq4' (31,79)

хочу разобраться где проблема

и кстати есть стандартная функция ObjectsDeleteAll() которая заменяет то что вы написали. Вы же хотели удалить все объекты начинающиеся с NAME ??

ObjectsDeleteAll(0,"NAME ") вам в помощь :-) Только обратите внимание что сепаратор " " включен в имя, чтобы случайно не поудалялись "NAMEFOO"

Konstantin Erin
2162
Konstantin Erin  
koko_moko:  удаляется ровно половина обьектов.  хочу разобраться где проблема

Вот здесь объяснено для ордеров. Для объектов то же самое...

koko_moko
365
koko_moko  
STARIJ:

Вот здесь объяснено для ордеров. Для объектов то же самое...


да, спасибо, почитал. просто я не думал что номера плавающие.

Maxim Kuznetsov:

и кстати есть стандартная функция ObjectsDeleteAll() которая заменяет то что вы написали. Вы же хотели удалить все объекты начинающиеся с NAME ??

ObjectsDeleteAll(0,"NAME ") вам в помощь :-) Только обратите внимание что сепаратор " " включен в имя, чтобы случайно не поудалялись "NAMEFOO"


спасибо, просто не знал что там есть параметры, почему то.

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий