Preguntas de un "tonto" - página 35

 
Silent:

Sí, si elimina hasta 3 letras

Esa no es la cuestión.

Entonces esperamos una respuesta de los compañeros más competentes)).
 
tol64:
Intenta estudiar tal o cual tema según lo necesites. Una vez que llegue a un punto en su sistema en el que necesite ciertas "palancas" (funciones), entonces empiece a experimentar con ellas. He descubierto que este método de estudio (en mi caso) funciona bastante bien)).
Sí, lo hago, no puedo salir de inite con parámetros de entrada :) y sin arrays será bastante difícil ir más allá, probado en 4.
 
tol64:
Entonces esperamos la respuesta de los compañeros más competentes).
Esperando :)
 
Silent:
Espera :)

Mejor aún, no esperes). Sigue experimentando)).

Elimina el valor del array al declararlo. Debe ser como en la ayuda:

string result[];
Y no tendrás ningún error. Según entiendo, la cadena completa especificada en la variable to_split se coloca en el array, y luego se procede a la extracción de subcadenas.
Документация по MQL5: Строковые функции / StringSubstr
Документация по MQL5: Строковые функции / StringSubstr
  • www.mql5.com
Строковые функции / StringSubstr - Документация по MQL5
 
tol64:

Mejor aún, no espere). Sigue experimentando)).

Elimina el valor del array al declararlo. Debe ser la forma en que está escrito en la ayuda:

Y no habrá errores. Por lo que he entendido, la cadena completa especificada en la variable to_split se coloca en el array y luego se realiza la extracción de subcadenas.

Está claro. Sólo que esto es una trampa potencial - de hecho me encontré con este error en mi código y funciona - con un error.

Por ejemplo, este es el texto de ayuda de CopyBuffer

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

¿Dónde está la lógica? Quiero decir, ¿cuál es la diferencia con StringSplit?

Y si haces que todas las matrices sean dinámicas, te quedarás sin memoria.

Upgr ArrayResize con puesta a cero es una variante, por supuesto, pero no me gusta.

 
tol64:

Según entiendo, la cadena completa especificada en la variable to_split se coloca en el array, y luego se extrae la subcadena.

No, no puede ser así.
 
Silent:

En tu ejemplo, el problema es que la propia función StringSplit() se encarga de la cantidad de memoria necesaria en el array pasado como parámetro.

Así que resulta que un array estático funciona (si hay suficiente memoria) pero provoca un error porque la gente intenta re-particionarla.

Prueba las matrices dinámicas estáticas y distribuidas, y verás:

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:

Prueba la variante con matrices dinámicas estáticas y distribuidas y lo verás claro:

Para probar el array dinámico, basta con descomentar ArrayResize(result,3); ? Si es así, habrá una advertencia en la compilación:

 
tol64:

Para probar un array dinámico, basta con descomentar ArrayResize(result,3); ? Si es así, hay una advertencia sobre la compilación:


¿es un problema irresoluble? hazlo dinámico.
 
Urain:

En tu ejemplo, el problema es que la propia función StringSplit() se encarga de la cantidad de memoria necesaria en el array pasado como parámetro.

Por eso, un array estático funciona (si hay suficiente memoria), pero provoca un error porque la gente intenta volver a particionarlo.

Entonces, ¿podemos utilizar StringSplit() con matrices estáticas o no?

Si puedes, no debería haber un error si hay suficiente memoria. Si no, no debería funcionar.