MQL4で文字列が数値に変換できるか調べる方法

プログラミング

こんにちは、たかはしみのるです。

ダイヤログなどに入力された文字に基づいて売買を行う場合、入力された文字が本当に数値データなのか判別する必要があります。

この記事では、文字列が数値データなのか判別するための条件、および実際に作成した関数を紹介します。

標準関数は用意されていない

残念ながらMQL4には標準で数値かどうか判別する関数は用意されていません。用意されている言語も多いのですが、こればっかりは仕方ありません。

用意されていなければ自分で作るしかありません。

数値かどうかの判別条件

それでは、文字列が数値とみなせるための条件を考えましょう。

  • ‘-‘(マイナス)が文字列先頭にあり1個だけの場合は数値の可能性がある。2つ以上ある場合は数値ではない
  • ‘.’(ドット)の個数は0または1個の場合は数値の可能性がある。
  • ’-‘と’.’を除くと、すべての文字は’0’~’9’の間の文字で構成されている

これらの条件を満たせば、数値として扱って大丈夫です。

自作の判別関数

それでは、先程挙げた条件で判別する関数を作成しましょう。

今回の例では、文字列を置換する関数(StringReplace)を使います。

この関数は置換する文字が何個含まれていたかが戻り値になっているので、とても便利です。

bool IsNumber(string str){
   string tmp = str;
   int count;
   int i;
   count = StringReplace(tmp, "-", "");
   //"-"の数が2つ以上ならfalse
   if(count > 1) return false;

   //"-"の数が1つだけで1文字目以外ならfalse
   if(count == 1 && StringGetCharacter(tmp, 0) != '-') return false;

   count = StringReplace(tmp, ".", "");
   //"."の数が2つ以上ならfalse
   if(count > 1) return false;
   
   //残った文字が0-9の間になければfalse
   for(i = StringLen(tmp) - 1; i >= 0; i--){
      int c = StringGetCharacter(tmp, i);
      if(c < '0' || c > '9') return false;
   }
   return true;
}

スクリプトに組み込んで動作確認を行い、正しく動作することを確認しましたが、もし不具合等があればぜひコメントで指摘ください。

コメント

タイトルとURLをコピーしました