Объявление строкового массива, нужна помошь, однако.. - страница 4

 
TheXpert >>:

Запустите и посмотрите лог для ускорения :). Активное состояние внешней переменной -- не нуль.

ну по принтам вроде ОНО..

"на лету" параметры менять можно, это есть ГУД :)

---

попробую переделать иниты в булы (мышей тыркать в выключатель приятнее) и передать всё это счастье в функцию для дальнейшей обработки, посмотрим.. (кажется с передачей в пользовательскую функцию у меня будут проблемы..)

 
alexx_v >>:


"на лету" параметры менять можно, это есть ГУД :)

Разочарую -- нельзя. Вывод происходит в ините, просто при смене параметров советник инициализируется заново.
 
TheXpert >>:
Разочарую -- нельзя. Вывод происходит в ините, просто при смене параметров советник инициализируется заново.

но параметры-то меняются после их смены, при работающем советнике, по крайней мере в логе видна деинициализация и инициализация с новыми параметрами..

---

да, считает он как-то не правильно, при 2-х непустых параметрах, он выдает три.. в общем при разных вариантах могут быть одинаковые параметры.. где-то нестыковочка

 
SergNF >>:

На самом деле формулировка "проблемы" очень сумбурная. :(

Я бы обратил внимание на то, что во всех "примерах" речь идет о "char'ах" ("а", "ж" и т.д.)

Если "это" не случайно, тогда пишите во внешних переменных строку "воавть3кd36gnтоврамрат", узнавайте ее длину, создавайте массив размерностью в длину этой строки, и, вырезая "буковки", заполняйте в цикле массив.

ЗЫ. Если же не "char'ы", а 2х,3х ... 6ти ;) символьные комбинации "буковок", то пишите их подряд и/или с разделителями.

А если в следующей внешней переменной указать "длину" или разделитель, то "ваааще" все получится универсально и компактно.

Парсинг ... мать его. :)

дык в чём сумбурность собственно? задача сформулирована довольно четко

зачем мне писать что-то в экстернах?, я и так сейчас пишу, только в лоб, прямо в пользовательской функции - объявляю стринговый массив, заполняю его нужными мне элементами и компилирую советника, всё - на выходе получаю то что нужно и рабочее на все 100%

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

 

Я так ничего и не понял..:(

Мож, хоть какая с меня польза будет:

для передачи массива в пользовательскую функцию просто объявите массив глобальным; в этом случае его не нужно передавать в функцию (в списке параметров), и объявлять его в функции тоже не нужно, но его значения в функции будут доступны.

 
alexx_v >>:

но параметры-то меняются после их смены, при работающем советнике, по крайней мере в логе видна деинициализация и инициализация с новыми параметрами..

---

да, считает он как-то не правильно, при 2-х непустых параметрах, он выдает три.. в общем при разных вариантах могут быть одинаковые параметры.. где-то нестыковочка


Стыд мне и позор

Надо проинициализировать строки

   for (int i = 0; i < COUNT; i++)
   {
      array[i] = "";
   }
Просто в С++ у строк есть конструктор по умолчанию... А здесь видимо проблемы.
 
TheXpert >>:


Стыд мне и позор

Надо проинициализировать строки

Просто в С++ у строк есть конструктор по умолчанию... А здесь видимо проблемы.

Перестаньте, кому здесь стыд и позор - так это мне: ни объяснить толком, ни понять то, что объясняют :)

Вы могли бы внести поправки в "ОНО" и перевыложить рабочий вариант?

 
alexx_v >>:

Перестаньте, кому здесь стыд и позор - так это мне: ни объяснить толком, ни понять то, что объясняют :)

Вы могли бы внести поправки в "ОНО" и перевыложить рабочий вариант?

#property copyright ""
#property link      ""

extern int a = 0;
extern int b = 0;
extern int c = 0;
extern int d = 0;

// сюда пишем количество переменных
#define COUNT 4 

// здесь задаем соответствия строк переменным
string array[COUNT];

// здесь останутся непустые соответствия
string varArray[];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
{
   for (int i = 0; i < COUNT; i++)
   {
      array[i] = "";
   }

   if (a != 0) array[0] = "a"; 
   if (b != 0) array[1] = "b"; 
   if (c != 0) array[2] = "c"; 
   if (d != 0) array[3] = "d"; 
   
   int count = 0;
   
   for (i = 0; i < COUNT; i++)
   {
      if (StringLen(array[i]) != 0)
      {
         count++;
      }
   }
   
   ArrayResize(varArray, count);

   count = 0;
   for (i = 0; i < COUNT; i++)
   {
      if (StringLen(array[i]) != 0)
      {
         varArray[count] = array[i];
         count++;
      }
   }
   
   Print("Количество непустых параметров :", ArraySize(varArray));
   Print("Параметры");
   
   for (i = 0; i < ArraySize(varArray); i++)
   {
      Print(varArray[i]);
   }
}

int start()
{
   return(0);
}
 

во-о-от, теперь вроде как всё работает красиво и правильно :) попробую адаптировать под свой "самокат".. спасибо :)

на сколько я понял, счетчики после

ArrayResize(varArray, count);

можно в код советника не включать?

SK. >>:

Я так ничего и не понял..:(

Мож, хоть какая с меня польза будет:

для передачи массива в пользовательскую функцию просто объявите массив глобальным; в этом случае его не нужно передавать в функцию (в списке параметров), и объявлять его в функции тоже не нужно, но его значения в функции будут доступны.

ок, сейчас буду пробовать, спасибо :)

 
alexx_v >>:

на сколько я понял, счетчики после

ArrayResize(varArray, count);

можно в код советника не включать?

Нет, все со счетчиками нужно включать. Впрочем можете не включать, заодно разберетесь что к чему