[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 58

 

Bir dizgenin karakterlerini diziler aracılığıyla değiştirme işlevini biraz değiştirdim:

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


Şimdi satır başına 2 karakterden fazla yineleniyor, örneğin 1215 satırı ab ile değiştirilecek. Ancak bir sorunla karşılaştım: işlev, dizide olmayan karakterleri atlıyor ve dizede tek sayıda karakter varsa, son karakteri atlıyor. Lütfen işlevi, 1214153 satırını a14b3 ile değiştirecek şekilde değiştirmeme yardım edin. Sayesinde!

 
Lians :

Lütfen işlevi, 1214153 satırını a14b3 ile değiştirecek şekilde değiştirmeme yardım edin. Sayesinde!


Mantık anlaşılmaz, dizide 14 tane var, yani. "e" ile değiştirilmelidir. Parite ile yığabilirsiniz, ancak sıfır eklemek daha iyidir, yani. 3'ü 03 ile değiştirin.
 
Lians :

Bir dizgenin karakterlerini diziler aracılığıyla değiştirme işlevini biraz değiştirdim:


Sanırım bir şeyin peşindesin. Bir alt dizi değiştirme işlevine ihtiyacınız varsa, bu seçeneği kullanabilirsiniz:

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

ucu biraz düzeltti, döngü olasılığına hemen dikkat etmedi

 
Roger :

Mantık anlaşılmaz, dizide 14 tane var, yani. "e" ile değiştirilmelidir. Parite ile yığabilirsiniz, ancak sıfır eklemek daha iyidir, yani. 3'ü 03 ile değiştirin.
Oh, pardon, fark etmedim, o zaman a17b3'te 1217153 diyelim, parite hakkında - sıfır ekleme seçeneği işe yarar, bunu yapabilir misin? .
 
alsu :

Sanırım bir şeyin peşindesin. Bir alt dizi değiştirme işlevine ihtiyacınız varsa, bu seçeneği kullanabilirsiniz:

Teşekkür ederim! Ancak dizelerim oluşturuldu ve değiştirmenin de oluşturulması gerekiyor ve her birinin 2 karakter alması isteniyor.
 
İşlemlerin yapılacağı zaman aralığını nasıl ayarlayacağımı söyler misiniz? (günün başlangıç saati ve bitiş saati)
 

Yalanlar :
Oh, pardon, fark etmedim, o zaman a17b3'te 1217153 diyelim, parite hakkında - sıfır ekleme seçeneği işe yarayacak, bunu yapabilir misiniz?
 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);
 }
Böyle bir yerde.
 

Teşekkürler, ama derleyemiyorum, satıra yemin ederim:

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

şöyle yemin eder: '+=' - her iki işlenen de sayısal olmalıdır

nasıl düzeltilir?

 
Lians :

Teşekkürler, ama derleyemiyorum, satıra yemin ederim:

şöyle yemin eder: '+=' - her iki işlenen de sayısal olmalıdır

nasıl düzeltilir?

Bu, MQL4'teki dizeler için çalışmaz.

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

Teşekkürler, ama derleyemiyorum, satıra yemin ederim:

şöyle yemin eder: '+=' - her iki işlenen de sayısal olmalıdır

nasıl düzeltilir?

 if (x) textNew = textNew + StrToInteger (TwoSymbols);
mql4, dize türleri için += operatörünü kullanamaz