[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 58

 

J'ai réécrit la fonction de remplacement des chaînes de caractères avec des tableaux :

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);
}


Maintenant, il passe par 2 caractères par chaîne, par exemple, la chaîne 1215 sera remplacée par ab. Mais j'ai rencontré un problème : la fonction omet les caractères qui ne sont pas dans le tableau et omet le dernier caractère si la chaîne a un nombre impair de caractères. S'il vous plaît aidez à changer la fonction pour que la chaîne 1214153 soit remplacée par a14b3. Merci !

 
Lians:

Aidez-moi à modifier la fonction pour que la ligne 1214153 soit remplacée par a14b3. Merci !


Je ne comprends pas la logique, vous avez 14 dans le tableau, c'est-à-dire qu'il devrait être remplacé par "e". Vous pouvez jouer avec la parité, mais il est préférable d'ajouter des zéros, c'est-à-dire de remplacer 3 par 03.
 
Lians:

J'ai un peu retravaillé la fonction de remplacement des caractères des chaînes de caractères par des tableaux :


Je pense que tu deviens un peu fou. Si vous avez besoin d'une fonction de remplacement de sous-chaîne, vous pouvez utiliser cette option :

// функция ищет 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);
} 

J'ai un peu modifié la fin, je n'ai pas immédiatement remarqué la fonction de boucle.

 
Roger:

Je ne comprends pas la logique, vous avez 14 dans le tableau, c'est-à-dire qu'il devrait être remplacé par "e". Vous pouvez jouer avec la parité, mais il est préférable d'ajouter des zéros, c'est-à-dire de remplacer 3 par 03.
Oh, désolé, je n'avais pas remarqué, alors disons 1217153 à a17b3, à propos de la parité - ajouter des zéros est bien, pouvez-vous le faire ? ou omettre le dernier caractère, je pensais que ce n'était pas important.
 
alsu:

Je pense que tu deviens un peu fou. Si vous avez besoin de la fonction de remplacement des sous-chaînes, vous pouvez utiliser cette option :

Merci ! Mais mes chaînes de caractères sont générées et la substitution doit être générée aussi et de préférence prendre 2 caractères à la fois.
 
Comment puis-je définir l'intervalle de temps dans lequel les transactions sont exécutées ? (heure de début et heure de fin)
 

Lians:
Oh, désolé, je n'avais pas remarqué, alors disons 1217153 sur a17b3, à propos de la parité - l'option d'ajouter des zéros fonctionnerait, pouvez-vous le faire ?
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);
 }
Quelque chose comme ça.
 

Merci, mais je n'arrive pas à le compiler, il se bloque sur une chaîne de caractères :

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

C'est comme ça : '+=' - les deux opérandes doivent être numériques.

Comment puis-je le réparer ?

 
Lians:

Merci, mais je n'arrive pas à le compiler, il se bloque sur une chaîne de caractères :

Voici ce qu'il dit : "+=" - les deux opérandes doivent être numériques.

Comment puis-je le réparer ?

Il ne fonctionne pas pour les chaînes de caractères dans MQL4.

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

Merci, mais je n'arrive pas à le compiler, il se bloque sur une chaîne de caractères :

il est écrit : '+=' - les deux opérandes doivent être numériques.

Comment puis-je le réparer ?

if(x) textNew = textNew + StrToInteger(TwoSymbols);
dans mql4, vous ne pouvez pas utiliser l'opérateur += pour les types de chaînes de caractères.