Fragen von einem "Dummy" - Seite 35

 
Silent:

Ja, wenn Sie bis zu 3 Buchstaben entfernen

Das ist nicht der Punkt.

Dann warten wir auf eine Antwort von kompetenteren Kameraden.))
 
tol64:
Versuchen Sie, dieses oder jenes Thema zu studieren, wenn Sie es brauchen. Sobald Sie in Ihrem System einen Punkt erreicht haben, an dem Sie bestimmte "Hebel" (Funktionen) benötigen, können Sie damit experimentieren. Ich habe festgestellt, dass diese Methode des Lernens (in meinem Fall) recht gut funktioniert))).
Ja, das tue ich, ich kann nicht aus inite mit Eingabeparametern herauskommen :) und ohne Arrays wird es ziemlich schwer sein, weiter zu gehen, getestet auf 4.
 
tol64:
Dann warten wir auf eine Antwort von kompetenteren Kameraden.))
Ich warte :)
 
Silent:
Warten :)

Besser noch, warten Sie nicht.) Experimentieren Sie weiter.))

Entfernen Sie den Wert aus dem Array, wenn Sie es deklarieren. Es muss wie bei der Hilfe sein:

string result[];
Und Sie werden keine Fehler haben. So wie ich es verstehe, wird die gesamte in der to_split-Variable angegebene Zeichenfolge in das Array eingefügt, und dann wird die Extraktion der Teilzeichenfolge fortgesetzt.
Документация по MQL5: Строковые функции / StringSubstr
Документация по MQL5: Строковые функции / StringSubstr
  • www.mql5.com
Строковые функции / StringSubstr - Документация по MQL5
 
tol64:

Besser noch, warten Sie nicht.) Experimentieren Sie weiter.))

Entfernen Sie den Wert aus dem Array, wenn Sie es deklarieren. Es muss so sein, wie es in der Hilfe steht:

Und es werden keine Fehler auftreten. Soweit ich es verstanden habe, wird die gesamte in der to_split-Variable angegebene Zeichenfolge in das Array eingefügt und dann eine Teilzeichenextraktion durchgeführt.

Das ist klar. Nur ist dies ein potenzieller Fallstrick - ich habe diesen Fehler tatsächlich in meinem Code gefunden und es funktioniert - mit einem Fehler.

Hier ist zum Beispiel der Hilfetext für CopyBuffer

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

Wo ist die Logik? Ich meine, was ist der Unterschied zu StringSplit?

Und wenn Sie alle Arrays dynamisch machen, wird Ihnen der Speicher ausgehen.

Upgr ArrayResize mit Zeroing ist natürlich eine Variante, aber ich mag sie nicht.

 
tol64:

So wie ich es verstehe, wird die gesamte in der to_split-Variable angegebene Zeichenfolge in das Array eingefügt, und dann wird die Teilzeichenfolge extrahiert.

Nein, so kann es nicht sein.
 
Silent:

In Ihrem Beispiel besteht das Problem darin, dass die Funktion StringSplit() selbst für die erforderliche Menge an Speicher in dem als Parameter übergebenen Array sorgt.

Es stellt sich also heraus, dass ein statisches Array funktioniert (wenn genügend Speicher vorhanden ist), aber einen Fehler verursacht, weil die Leute versuchen, es neu aufzuteilen.

Probieren Sie die statischen und verteilten dynamischen Arrays aus und Sie werden sehen:

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:

Probieren Sie die Variante mit statischen und verteilten dynamischen Arrays aus, und es wird Ihnen klar werden:

Um das dynamische Array auszuprobieren, entfernen Sie einfach das Kommentarzeichen ArrayResize(result,3); ? Wenn dies der Fall ist, wird bei der Kompilierung eine Warnung ausgegeben:

 
tol64:

Um ein dynamisches Array auszuprobieren, kommentieren Sie einfach ArrayResize(result,3); ? Wenn ja, gibt es eine Warnung zur Kompilierung:


Ist dies ein unlösbares Problem? Machen Sie es dynamisch.
 
Urain:

In Ihrem Beispiel besteht das Problem darin, dass die Funktion StringSplit() selbst für die erforderliche Menge an Speicher in dem als Parameter übergebenen Array sorgt.

Das ist der Grund, warum ein statisches Array funktioniert (wenn genügend Speicher vorhanden ist), aber einen Fehler verursacht, weil die Leute versuchen, es neu aufzuteilen.

Also, können wir StringSplit() mit statischen Arrays verwenden oder nicht?

Wenn Sie das können, sollte es keine Fehlermeldung geben, wenn genügend Speicher vorhanden ist. Wenn nicht, sollte es nicht funktionieren.