Questions d'un "mannequin - page 35

 
Silent:

Oui, si vous enlevez jusqu'à 3 lettres

Ce n'est pas la question.

Ensuite, nous attendons une réponse de camarades plus compétents.))
 
tol64:
Essayez d'étudier tel ou tel sujet en fonction de vos besoins. Une fois que vous avez atteint un point dans votre système où vous avez besoin de certains "leviers" (fonctions), commencez à les expérimenter. J'ai trouvé que cette méthode d'étude (dans mon cas) fonctionne assez bien))).
Oui, je le fais, je n'arrive pas à sortir de l'inite avec les paramètres d'entrée :) et sans tableaux il sera assez difficile d'aller plus loin, testé sur 4.
 
tol64:
Ensuite, nous attendons une réponse de camarades plus compétents.))
J'attends :)
 
Silent:
Attendez :)

Mieux encore, n'attendez pas). Continuez à expérimenter.))

Supprime la valeur du tableau lors de sa déclaration. Ça doit être comme dans l'aide :

string result[];
Et vous n'aurez pas d'erreurs. Si je comprends bien, la chaîne entière spécifiée dans la variable to_split est placée dans le tableau, puis l'extraction des sous-chaînes se poursuit.
Документация по MQL5: Строковые функции / StringSubstr
Документация по MQL5: Строковые функции / StringSubstr
  • www.mql5.com
Строковые функции / StringSubstr - Документация по MQL5
 
tol64:

Mieux encore, n'attendez pas). Continuez à expérimenter.))

Supprime la valeur du tableau lors de sa déclaration. Cela doit être la façon dont c'est écrit dans l'aide :

Et il n'y aura pas d'erreurs. D'après ce que j'ai compris, la chaîne entière spécifiée dans la variable to_split est placée dans le tableau, puis l'extraction des sous-chaînes est effectuée.

C'est clair. Seulement c'est un piège potentiel - j'ai effectivement rencontré cette erreur dans mon code et cela fonctionne - avec une erreur.

Par exemple, voici le texte d'aide pour CopyBuffer

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

Où est la logique ? Je veux dire, quelle est la différence avec StringSplit ?

Et si vous rendez tous les tableaux dynamiques, vous manquerez de mémoire.

UpgrrayResize avec mise à zéro est une variante, bien sûr, mais je ne l'aime pas.

 
tol64:

Si je comprends bien, la chaîne entière spécifiée dans la variable to_split est placée dans le tableau, puis la sous-chaîne est extraite.

Non, ça ne peut pas être comme ça.
 
Silent:

Dans votre exemple, le problème est que la fonction StringSplit() elle-même se charge de la quantité de mémoire requise dans le tableau passé en paramètre.

Il s'avère donc qu'un tableau statique fonctionne (si la mémoire est suffisante) mais provoque une erreur parce que les gens essaient de le repartitionner.

Essayez les tableaux statiques et dynamiques distribués, et vous verrez :

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:

Essayez la variante avec des tableaux statiques et dynamiques distribués et cela deviendra clair :

Pour essayer le tableau dynamique, il suffit de décommenter ArrayResize(result,3) ; ? Si c'est le cas, il y aura un avertissement à la compilation :

 
tol64:

Pour essayer un tableau dynamique, il suffit de décommenter ArrayResize(result,3) ; ? Si c'est le cas, il y a un avertissement sur la compilation :


s'agit-il d'un problème insoluble ? rendez-le dynamique.
 
Urain:

Dans votre exemple, le problème est que la fonction StringSplit() elle-même se charge de la quantité de mémoire requise dans le tableau passé en paramètre.

C'est pourquoi un tableau statique fonctionne (si la mémoire est suffisante), mais provoque une erreur parce que les gens essaient de le repartitionner.

Alors, peut-on utiliser StringSplit() avec des tableaux statiques ou non ?

Si vous le pouvez, il ne devrait pas y avoir d'erreur si la mémoire est suffisante. Sinon, ça ne devrait pas fonctionner.