ERRO ARRAY OUT OF RANGE

 

Preparei um código resumido aqui pra facilitar a explicação. o caso é que preciso criar um campo do tipo string para receber diversos valores numéricos separados por vírgula, quantos o usuário desejar inserir. Dai para tratar esses dados usei uma função que monta um array com cada dado separado pelas virgulas e um loop pra converter cada campo do array de string para double. Compila tudo certinho, porém quando joga o robô no gráfico da esse erro Array out of range.

Por favor alguém me ajuda a entender o erro ou fazer de uma forma diferente.

Desde já agradeço.

//+------------------------------------------------------------------+
//|                                                        Teste.mq5 |
//|                                                            Simon |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Simon"
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+



input string Valores = "10,15,25,35,45"; //Insira os valores separados por vírgula

string ArValores_String[]; //Array que vai receber os valores inseridos de forma organizada usando a função StringSplit.
double ArValores_double[]; //Array que vai receber os valores organizados já convertidos de string para double.

int OnInit()
  {

   int X = StringSplit(Valores,44,ArValores_String); //função organiza cada valor separado por vírgula em uma posição do array e a variável x
                                                     //conta quantos valores foram obtidos separadamente, ou seja, quantas posições tem o array
         				             
      if(X>0) //Se existirem valores a serem convertidos.
        { 
         for(int i=0;i<X;i++)                                             //loop que vai converter cada um dos valores 
           {                                                              //do array ArValores_String para double e inserir
            ArValores_double[i] = StringToDouble(ArValores_String[i]);    //no array ArValores_double para que eu possa fazer 
            PrintFormat("result[%d]=\"%s\"",i,ArValores_double[i]);       //operações com esses valores.
           }
        } 




   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
Arquivos anexados:
Teste.mq5  5 kb
 
simonbm:

Preparei um código resumido aqui pra facilitar a explicação. o caso é que preciso criar um campo do tipo string para receber diversos valores numéricos separados por vírgula, quantos o usuário desejar inserir. Dai para tratar esses dados usei uma função que monta um array com cada dado separado pelas virgulas e um loop pra converter cada campo do array de string para double. Compila tudo certinho, porém quando joga o robô no gráfico da esse erro Array out of range.

Por favor alguém me ajuda a entender o erro ou fazer de uma forma diferente.

Desde já agradeço.

Olá

só faltou o comando ArrayResize(ArValores_double, X);


PS: Aqui tem um pessoal bem tarimbado em programação, então não precisa ficar explicando cada linha de código.

 
tente isso...
input string             InpDistanceRP          = "30|70";
int rp_points[];

bool ListInputs(string list, int &list_result[])
  {
   bool res=true;
   string temp[];

   if(StringSplit(list,'|',temp)<0)
      res=false;
   else
     {
      ArrayResize(list_result, ArraySize(temp));
      for(int i=0; i<ArraySize(temp); i++)
         list_result[i]=temp[i];
     }
   return res;
  }

int OnInit()
  {
//---
   if(!ListInputs(InpDistanceRP, rp_points))
     {
      Print("Erro ao obter lista");
     }
   }
 
Rogerio Giannetti Torres #:

Olá

só faltou o comando ArrayResize(ArValores_double, X);


PS: Aqui tem um pessoal bem tarimbado em programação, então não precisa ficar explicando cada linha de código.

Cara não é que era só isso mesmo. Muitíssimo obrigado.

Razão: