文字列を検索したい!

文字列の検索とは

文字列の検索とは、ある文字列の中に探したい文字が存在するかどうか、言い換えると探したい文字を含んだ文字列かどうかを判断することです。代表的なケースとして、プログラムが設定されたチャートの通貨ペアがクロス円かどうか(「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
);

引用元:StringFind – MQL4 Reference

引数

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」が返却されることになります。

まとめ

文字列を検索するにはStringFind関数を使用する
第一引数は検索の対象の文字列
第二引数は検索する文字列
第三引数は検索を開始する位置、省略した場合は最初から検索
文字が見つかった場合は最初に出現する位置を返却
文字が見つからない場合は「-1」を返却
検索開始位置は省略可能
返却される位置はインデックスのため1文字目が「0」

参考URL

StringFind – MQL4 Reference
https://docs.mql4.com/strings/stringfind