[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 58

 

Ich habe die Funktion zur Ersetzung von Zeichenketten mit Arrays umgeschrieben:

string StrReplaceTwo(string text){
string textMod[] ={""};
string symbols1[] = {"12","15","19","13","14","16"};

string symbols2[] = {"a","b","c","d","e","f"};


string textNew="";

int textLen = StringLen(text);

for (int i1=0; i1<textLen; i1=i1+2)
{
string TwoSymbols = StringSubstr(text,i1,2);

for (int i2=0; i2<ArraySize(symbols1); i2++)

{
if (symbols1[i2]==TwoSymbols) {textNew = textNew + symbols2[ i2 ] ; i2=ArraySize(symbols1) ; }

}

}

return (textNew);
}


Jetzt werden 2 Zeichen pro Zeichenfolge durchlaufen, z. B. wird die Zeichenfolge 1215 durch ab ersetzt. Aber ich bin auf ein Problem gestoßen: Die Funktion lässt Zeichen aus, die nicht im Array enthalten sind, und lässt das letzte Zeichen aus, wenn die Zeichenfolge eine ungerade Anzahl von Zeichen hat. Bitte helfen Sie, die Funktion so zu ändern, dass die Zeichenfolge 1214153 durch a14b3 ersetzt wird. Ich danke Ihnen!

 
Lians:

Bitte helfen Sie mir, die Funktion so zu ändern, dass Zeile 1214153 durch a14b3 ersetzt wird. Ich danke Ihnen!


Ich verstehe die Logik nicht, Sie haben 14 im Array, d.h. es sollte durch "e" ersetzt werden. Sie können mit der Parität herumspielen, aber es ist besser, Nullen hinzuzufügen, d. h. 3 durch 03 zu ersetzen.
 
Lians:

Ich habe die Funktion zur Ersetzung von Zeichenfolgen durch Arrays ein wenig überarbeitet:


Ich glaube, Sie werden ein bisschen verrückt. Wenn Sie eine Funktion zur Ersetzung von Teilstrings benötigen, können Sie diese Option verwenden:

// функция ищет matched_text в строке text и заменяет его на replace_text

string StringReplace(string text, string matched_text, string replace_text)
{
   int pos=StringFind(text,matched_text);
   while(pos>=0)
   {
      if(pos==0) text = StringConcatenate(replace_text,StringSubstr(text,StringLen(matched_text)));
      else text = StringConcatenate(StringSubstr(text,0,pos),replace_text,StringSubstr(text,pos+StringLen(matched_text)));
      pos=StringFind(text,matched_text,pos+StringLen(replace_text));
   }
   return(text);
} 

Ich habe das Ende ein wenig verändert, ich habe die Schleifenfunktion nicht sofort bemerkt.

 
Roger:

Ich verstehe die Logik nicht, Sie haben 14 im Array, d.h. es sollte durch "e" ersetzt werden. Sie können mit der Parität herumspielen, aber es ist besser, Nullen hinzuzufügen, d. h. 3 durch 03 zu ersetzen.
Oh, tut mir leid, habe ich nicht bemerkt, dann sagen wir 1217153 zu a17b3, über Parität - Nullen hinzufügen ist in Ordnung, können Sie das tun? Oder lassen Sie das letzte Zeichen weg, ich dachte, es ist nicht wichtig.
 
alsu:

Ich glaube, Sie werden ein bisschen verrückt. Wenn Sie die Teilstring-Ersetzungsfunktion benötigen, können Sie diese Option verwenden:

Ich danke Ihnen! Aber meine Zeichenketten sind generiert und die Ersetzung muss auch generiert werden und vorzugsweise 2 Zeichen auf einmal nehmen.
 
Wie stelle ich den Zeitrahmen ein, in dem der Handel ausgeführt wird? (Startzeit und Endzeit)
 

Lians:
Oh, tut mir leid, habe ich nicht bemerkt, dann sagen wir 1217153 auf a17b3, über Parität - die Option, Nullen hinzuzufügen, würde funktionieren, können Sie das tun?
string StrReplaceTwo(string text){
 string textMod[] ={""};
 string symbols1[] = {"12","15","19","13","14","16"};

 string symbols2[] = {"a","b","c","d","e","f"};


 string textNew="";

 int textLen = StringLen(text);

 for (int i1=0; i1<textLen; i1=i1+2)
 {
 string TwoSymbols = StringSubstr(text,i1,2);
bool x=true;

 for (int i2=0; i2<ArraySize(symbols1); i2++)

 {
 if (symbols1[i2]==TwoSymbols) {textNew = textNew + symbols2[ i2 ] ; x=false; break;}

 }
if(x) textNew +=StrToInteger(TwoSymbols);
 }

 return (textNew);
 }
Ungefähr so.
 

Danke, aber ich kann es nicht kompilieren, es stürzt bei einem String ab:

if(x) textNew +=StrToInteger(TwoSymbols);

hier steht: '+=' - beide Operanden müssen numerisch sein

Wie kann ich es reparieren?

 
Lians:

Danke, aber ich kann es nicht kompilieren, es stürzt bei einem String ab:

Es flucht wie folgt: '+=' - beide Operanden müssen numerisch sein

Wie kann ich es reparieren?

Es funktioniert nicht für Strings in MQL4.

if(x) textNew = textNew + StrToInteger(TwoSymbols);
 
Lians:

Danke, aber ich kann es nicht kompilieren, es stürzt bei einem String ab:

Es ist wie folgt: '+=' - beide Operanden müssen numerisch sein

Wie kann ich es reparieren?

if(x) textNew = textNew + StrToInteger(TwoSymbols);
in mql4 kann man den += Operator nicht für Stringtypen verwenden