Domande da un "manichino" - pagina 35

 
Silent:

Sì, se si rimuovono fino a 3 lettere

Non è questo il punto.

Poi aspettiamo una risposta da compagni più competenti)).
 
tol64:
Cercate di studiare questo o quell'argomento quando ne avete bisogno. Una volta che arrivi a un punto del tuo sistema in cui hai bisogno di certe "leve" (funzioni), allora inizia a sperimentarle. Ho scoperto che questo metodo di studio (nel mio caso) funziona abbastanza bene))).
Sì, lo faccio, non posso uscire dall'inite con i parametri di input :) e senza array sarà abbastanza difficile andare oltre, testato su 4.
 
tol64:
Poi aspettiamo una risposta da compagni più competenti)).
In attesa :)
 
Silent:
Aspetta :)

Meglio ancora, non aspettare). Continua a sperimentare))

Rimuove il valore dall'array quando lo dichiara. Deve essere come nella guida:

string result[];
E non avrete alcun errore. Da quanto ho capito, l'intera stringa specificata nella variabile to_split viene messa nell'array, e poi l'estrazione della sottostringa continua.
Документация по MQL5: Строковые функции / StringSubstr
Документация по MQL5: Строковые функции / StringSubstr
  • www.mql5.com
Строковые функции / StringSubstr - Документация по MQL5
 
tol64:

Meglio ancora, non aspettare). Continua a sperimentare))

Rimuove il valore dall'array quando lo dichiara. Deve essere il modo in cui è scritto nell'aiuto:

E non ci saranno errori. Per quanto ho capito, l'intera stringa specificata nella variabile to_split viene messa nell'array e poi viene eseguita l'estrazione della sottostringa.

È chiaro. Solo che questa è una potenziale insidia - ho effettivamente incontrato questo errore nel mio codice e funziona - con un errore.

Per esempio, ecco il testo di aiuto per CopyBuffer

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

Dov'è la logica? Voglio dire, qual è la differenza con StringSplit?

E se rendete tutti gli array dinamici, finirete la memoria.

Upgr ArrayResize con azzeramento è una variante, naturalmente, ma non mi piace.

 
tol64:

Da quanto ho capito, l'intera stringa specificata nella variabile to_split viene messa nell'array, e poi viene estratta la sottostringa.

No, non può essere così.
 
Silent:

Nel tuo esempio, il problema è che la funzione StringSplit() stessa si occupa della quantità di memoria richiesta nell'array passato come parametro.

Così si scopre che un array statico funziona (se c'è abbastanza memoria) ma causa un errore perché la gente cerca di ri-partizionarlo.

Provate gli array statici e dinamici distribuiti, e vedrete:

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:

Provate la variante con array statici e dinamici distribuiti e diventerà chiaro:

Per provare l'array dinamico, basta decommentare ArrayResize(result,3); ? Se è così, ci sarà un avvertimento durante la compilazione:

 
tol64:

Per provare un array dinamico, basta decommentare ArrayResize(result,3); ? Se è così, c'è un avvertimento sulla compilazione:


è un problema irrisolvibile? renderlo dinamico.
 
Urain:

Nel tuo esempio, il problema è che la funzione StringSplit() stessa si occupa della quantità di memoria richiesta nell'array passato come parametro.

Questo è il motivo per cui un array statico funziona (se c'è abbastanza memoria), ma causa un errore perché la gente cerca di ri-partizionarlo.

Quindi, possiamo usare StringSplit() con gli array statici o no?

Se potete, non dovrebbe esserci un errore se c'è abbastanza memoria. Se no, non dovrebbe funzionare.