[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 58

 

Ho riscritto la funzione di sostituzione delle stringhe con gli array:

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


Ora passa attraverso 2 caratteri per stringa, ad esempio la stringa 1215 sarà sostituita da ab. Ma ho incontrato un problema: la funzione omette i caratteri che non sono nell'array e omette l'ultimo carattere se la stringa ha un numero dispari di caratteri. Per favore aiutatemi a cambiare la funzione in modo che la stringa 1214153 venga sostituita con a14b3. Grazie!

 
Lians:

Per favore aiutatemi a cambiare la funzione in modo che la linea 1214153 sia sostituita da a14b3. Grazie!


Non capisco la logica, hai 14 nell'array, cioè dovrebbe essere sostituito con "e". Si può pasticciare con la parità, ma è meglio aggiungere degli zeri, cioè sostituire 3 con 03.
 
Lians:

Ho rielaborato un po' la funzione di sostituzione dei caratteri delle stringhe con gli array:


Credo che tu stia diventando un po' stravagante. Se avete bisogno di una funzione di sostituzione della sottostringa, potete usare questa opzione:

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

Ho modificato un po' la fine, non ho notato subito la funzione di looping

 
Roger:

Non capisco la logica, hai 14 nell'array, cioè dovrebbe essere sostituito da "e". Si può pasticciare con la parità, ma è meglio aggiungere degli zeri, cioè sostituire 3 con 03.
Oh, scusa, non ci avevo fatto caso, allora diciamo da 1217153 a a17b3, riguardo alla parità - l'aggiunta di zeri va bene, puoi farlo? O lasciare che ometta l'ultimo carattere, ho pensato che non è importante.
 
alsu:

Credo che tu stia diventando un po' stravagante. Se avete bisogno della funzione di sostituzione della sottostringa, potete usare questa opzione:

Grazie! Ma le mie stringhe sono generate e anche la sostituzione deve essere generata e preferibilmente prendere 2 caratteri alla volta.
 
Come faccio a impostare il time frame in cui vengono eseguite le compravendite? (ora di inizio e di fine)
 

Lians:
Oh, scusate, non ci avevo fatto caso, allora diciamo 1217153 su a17b3, riguardo alla parità - l'opzione di aggiungere degli zeri funzionerebbe, potete farlo?
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);
 }
Da qualche parte così.
 

Grazie, ma non riesco a compilarlo, si blocca su una stringa:

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

È così: '+=' - entrambi gli operandi devono essere numerici

come posso risolvere il problema?

 
Lians:

Grazie, ma non riesco a compilarlo, si blocca su una stringa:

Questo è ciò che dice: '+=' - entrambi gli operandi devono essere numerici

Come posso rimediare?

Non funziona per le stringhe in MQL4.

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

Grazie, ma non riesco a compilarlo, si blocca su una stringa:

dice: '+=' - entrambi gli operandi devono essere numerici

Come posso rimediare?

if(x) textNew = textNew + StrToInteger(TwoSymbols);
in mql4 non si può usare l'operatore += per i tipi di stringa