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.
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.
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.
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:
voidOnStart()
{
//---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]);
}
}
}
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Sì, se si rimuovono fino a 3 lettere
Non è questo il punto.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))).
Poi aspettiamo una risposta da compagni più competenti)).
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.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.
Da quanto ho capito, l'intera stringa specificata nella variabile to_split viene messa nell'array, e poi viene estratta la sottostringa.
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:
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:
Per provare un array dinamico, basta decommentare ArrayResize(result,3); ? Se è così, c'è un avvertimento sulla compilazione:
è un problema irrisolvibile? renderlo dinamico.
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.