Perguntas de um "boneco" - página 35

 
Silent:

Sim, se remover até 3 letras

Não é essa a questão.

Depois esperamos por uma resposta de camaradas mais competentes)).
 
tol64:
Tente estudar este ou aquele tópico à medida das suas necessidades. Quando chegar a um ponto no seu sistema onde precisa de certas "alavancas" (funções), então comece a experimentar com elas. Descobri que este método de estudo (no meu caso) funciona bastante bem))))
Sim, faço-o, não consigo sair do inite com parâmetros de entrada :) e sem matrizes será bastante difícil ir mais longe, testado no 4.
 
tol64:
Depois esperamos por uma resposta de camaradas mais competentes)).
À espera :)
 
Silent:
Espera :)

Melhor ainda, não espere). Continua a experimentar)).

Retirar o valor da matriz ao declará-lo. Deve ser como na ajuda:

string result[];
E não terá quaisquer erros. Tal como entendo, toda a cadeia de caracteres especificada na variável to_split é colocada na matriz, e depois a extracção do substrato continua.
Документация по MQL5: Строковые функции / StringSubstr
Документация по MQL5: Строковые функции / StringSubstr
  • www.mql5.com
Строковые функции / StringSubstr - Документация по MQL5
 
tol64:

Melhor ainda, não espere). Continua a experimentar)).

Retirar o valor da matriz ao declará-lo. Deve ser a forma como está escrito na ajuda:

E não haverá erros. Tanto quanto percebi, toda a cadeia especificada na variável to_split é colocada na matriz e depois é efectuada a extracção de substrato.

É claro. Só que isto é uma potencial armadilha - na verdade encontrei este erro no meu código e ele funciona - com um erro.

Por exemplo, aqui está o texto de ajuda para CopyBuffer

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

Onde está a lógica? Qual é a diferença com StringSplit?

E se tornar todas as matrizes dinâmicas, ficará sem memória.

Upgrar ArrayResize com zeragem é uma variante, claro, mas não gosto dela.

 
tol64:

Tal como entendo, toda a cadeia de caracteres especificada na variável to_split é colocada na matriz, e depois o substrato é extraído.

Não, não pode ser assim.
 
Silent:

No seu exemplo, o problema é que a própria função StringSplit() cuida da quantidade de memória necessária na matriz passada como parâmetro.

Assim, acontece que uma matriz estática funciona (se houver memória suficiente) mas causa um erro porque as pessoas tentam re-particioná-la.

Experimente as matrizes dinâmicas estáticas e distribuídas, e verá:

void OnStart()
  {
//---
   string to_split="мама_мыла_раму"; // строка для разбивки на подстроки
   string sep="_";                // раздедитель в виде символа
   ushort u_sep;                  // код символа разделителя
   string result[3];               // массив для получения строк
   //ArrayResize(result,3);    
//--- получим код разделителя
   u_sep=StringGetCharacter(sep,0);
   //--- разобьем строку на подстроки
   int k=StringSplit(to_split,u_sep,result);
   Print("GetLastError=",GetLastError()); // это я добавил чтоб видеть есть ли ошибка   
//--- выведем комментарий 
   PrintFormat("Получено строк: %d. Использован разделитель '%s' с кодом %d",k,sep,u_sep);
   //--- теперь выведем все полученные строки
   if(k>0)
     {
      for(int i=0;i<k;i++)
        {
         PrintFormat("result[%d]=%s",i,result[i]);
        }
     }
  }
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
Urain:

Experimente a variante com matrizes dinâmicas estáticas e distribuídas e ficará clara:

Para experimentar a matriz dinâmica, basta descomentar ArrayResize(resultado,3); ? Se assim for, haverá um aviso sobre a compilação:

 
tol64:

Para tentar um array dinâmico, apenas descomente ArrayResize(resultado,3); ? Se assim for, há um aviso na compilação:


é este um problema insolúvel? torná-lo dinâmico.
 
Urain:

No seu exemplo, o problema é que a própria função StringSplit() cuida da quantidade de memória necessária na matriz passada como parâmetro.

É por isso que uma matriz estática funciona (se houver memória suficiente), mas causa um erro porque as pessoas tentam re-particioná-la.

Então, podemos usar StringSplit() com arrays estáticos ou não?

Se puder, não deve haver um erro se houver memória suficiente. Caso contrário, não deve funcionar.