StringFind関数の働き・役割
StringFind関数は、指定した文字列の中から特定の文字列を検索し、その最初の位置を返すために使用されます。
StringFind関数を使用することで、文字列の中に特定のパターンや文字列が含まれているかどうかを確認できます。例えば、特定のキーワードが文章の中にあるかどうかを調べるのに便利です。
StringFind関数の引数について
StringFind関数は以下の引数を取ります:
- str – 検索対象の元の文字列。
- sub_string – 検索する「特定の文字列」。
- start_pos – (オプション)検索を開始する位置。この引数を指定しない場合は、文字列の先頭から検索を開始します。
例:StringFind("Hello, MQL5!", "MQL5")
という呼び出しは、「Hello, MQL5!」という元の文字列の中から「MQL5」という文字列を検索します。
StringFind関数の戻り値について
StringFind関数は、特定の文字列が最初に見つかった位置を示す整数値を返します。位置は0から始まるインデックスで表されます。もし特定の文字列が見つからなかった場合は-1を返します。
StringFind関数を使う際の注意点
- 大文字と小文字は区別されます。大文字と小文字を無視して検索する場合は、文字列を事前に変換する必要があります。
- start_pos引数を指定しない場合、検索は文字列の先頭から行われます。
- 検索対象の文字列が空の場合、関数は-1を返します。
- スペースは一文字としてカウントされます。例えば、”Hello, MQL5!”という文字列において、各スペースも他の文字と同様に1文字として扱われます。
StringFind関数を使ったサンプルコード
以下に、StringFind関数を使用したサンプルコードを示します。このコードは、元の文字列の中に特定の文字列が存在するかどうかを調べ、その位置をエキスパートログに出力します。
//+------------------------------------------------------------------+
//| スクリプトのエントリーポイント |
//+------------------------------------------------------------------+
void OnStart()
{
// 検索対象の元の文字列
string original = "Hello, MQL5! Welcome to MQL5 programming.";
// 検索する特定の文字列
string searchString = "MQL5";
// 特定の文字列の位置を検索します(文字列の先頭から)
int position = StringFind(original, searchString);
// 検索結果をエキスパートログに出力します
if(position != -1)
{
Print("特定の文字列が見つかりました。位置: ", position);
}
else
{
Print("特定の文字列が見つかりませんでした。");
}
// 特定の文字列の位置を検索します(10文字目から)
int positionFrom10 = StringFind(original, searchString, 10);
// 検索結果をエキスパートログに出力します
if(positionFrom10 != -1)
{
Print("10文字目から検索した場合、特定の文字列が見つかりました。位置: ", positionFrom10);
}
else
{
Print("10文字目から検索した場合、特定の文字列が見つかりませんでした。");
}
}
このサンプルコードの出力結果は以下の通りです:
特定の文字列が見つかりました。位置: 7
10文字目から検索した場合、特定の文字列が見つかりました。位置: 24
サンプルコードに使われた関数や文法要素の簡単な解説
- OnStart関数: スクリプトが実行されるときに自動的に呼び出される関数です。
- StringFind関数: 指定された特定の文字列を検索し、その最初の位置を返します。
- Print関数: エキスパートログにメッセージを出力するために使用されます。デバッグや情報の出力に便利です。
StringGetCharacter関数とStringFind関数の違いについて
StringGetCharacter関数とStringFind関数は、文字列操作において異なる役割を果たします。StringGetCharacter関数は指定した文字列の特定の位置にある文字を取得するために使用されます。
例えば、文字列「Hello World!」の6番目の位置にある文字を取得するには以下のようにします。
void OnStart()
{
string text = "Hello World!";
ushort character = StringGetCharacter(text, 6);
Print("6番目の文字: ", character); // 結果: 'W'
}
一方、StringFind関数は指定した文字列内で特定の部分文字列を検索し、その位置を返します。見つかった場合は位置を、見つからなかった場合は-1を返します。例えば、文字列「Hello World!」内で「World」を検索するには以下のようにします。
void OnStart()
{
string text = "Hello World!";
int position = StringFind(text, "World");
if(position != -1)
{
Print("部分文字列が見つかりました: 位置は ", position); // 結果: 6
}
else
{
Print("部分文字列が見つかりませんでした");
}
}
StringGetCharacter関数は文字列の特定位置にある文字を取得するのに対し、StringFind関数は文字列内で特定の部分文字列を検索するために使用されます。これらの関数を適切に使い分けることで、文字列操作をより効果的に行うことができます。
※StringGetCharacter関数についての詳細は↓の記事をご参照ください
<参照>
StringAdd関数/StringBufferLen関数/StringCompare関数/StringLen関数/StringConcatenate関数/StringFill関数/StringInit関数/StringGetCharacter関数/StringSetLength関数/StringReplace関数/StringReserve関数/StringSetCharacter関数/StringSplit関数/StringSubstr関数/StringToLower関数/StringToUpper関数/StringTrimLeft関数/StringTrimRight関数