文字列の検索とは
文字列の検索とは、ある文字列の中に探したい文字が存在するかどうか、言い換えると探したい文字を含んだ文字列かどうかを判断することです。代表的なケースとして、プログラムが設定されたチャートの通貨ペアがクロス円かどうか(「JPY」という文字を含んだ通貨ペアかどうか)のように、通貨ペアが特定のグループに属しているかどうかを判断する際によく使用することになります。
文字列を検索するStringFind関数
文字列を検索するには、MQL4で提供されているStringFind関数を使用します。
int StringFind( string string_value, // string in which search is made string match_substring, // what is searched int start_pos = 0 // from what position search starts );
引数
string_value
第一引数のstring_valueには検索の対象となる文字列を指定します。
match_substring
第二引数のmatch_substringには検索する文字列を指定します。ここで指定する文字がstring_valueに存在する場合は、戻り値でその位置を返却することになります。
start_pos
第三引数のstart_posには検索を開始する位置を指定します。開始位置はインデックスで指定するため、1文字目が「0」となります。省略した場合は文字列を先頭から検索を行います。
戻り値
第二引数で指定した文字が見つかった場合はその文字が出現する最初のインデックス、見つからない場合は「-1」を返却します。
使用例
string value = "ABCDEFG"; string target = "C"; int pos = StringFind(value, target); Print("target is " + pos);
target is 2
上記例では「ABCDEFG」という文字列の中から「C」の文字を検索し、その位置を出力しています。位置はインデックスで返却されるため、「C」の位置である3文字目のインデックスは「2」となります。
該当する文字が2つ以上存在する場合
該当する文字が2つ以上存在する場合、例えば「ABCABC」という文字列の中から「B」の文字を検索した場合は、最初に出現した位置のインデックスが返却されます。2番目に出現した位置のインデックスを取得したい場合は、第三引数に適切な検索開始位置を指定した上で検索を行う必要があります。
2文字以上の文字列を検索する
2文字以上の文字列を検索することも可能です。例えば「ABCDEF」という文字列から「BCD」の文字を検索すると、「BCD」の文字が出現するのは2文字目であるため、そのインデックスである「1」が返却されることになります。
まとめ
参考URL
StringFind – MQL4 Reference
https://docs.mql4.com/strings/stringfind