macpee: Of course a period (.) should be numeric since (.) is regarded as the same thing with a period and zero (.0) which is in fact zero (0). Now I tried increasing the number of period (.....) and it is still recognizing it as numeric. We need the code for period (.) so as to eliminate additional period (....) once the first period has been cited in
{
//---
ObjectCreate("SimultaneousReleaseIndex1",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT,"Four");
ObjectCreate("SimultaneousReleaseIndex2",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT,"44");
ObjectCreate("SimultaneousReleaseIndex3",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT,"Forty4");
ObjectCreate("SimultaneousReleaseIndex4",OBJ_LABEL,0,0,0);
ObjectSetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT,".1234567890");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex1",OBJPROP_TEXT)))
Print("text1 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex2",OBJPROP_TEXT)))
Print("text2 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex3",OBJPROP_TEXT)))
Print("text3 is numeric");
if(IsNumeric(ObjectGetString(0,"SimultaneousReleaseIndex4",OBJPROP_TEXT)))
Print("text4 is numeric");
}
//---
bool IsNumeric(string text)
{
int length=StringLen(text);
for(int i=0;i<length;i++)
{
int char1=StringGetChar(text,i);
if((char1>47 && char1<58) || char1==46)
continue;
else
return(false);
}
return(true);
}
//+------------------------------------------------------------------+
ああ、私を見てください。気づくべきでした。ありがとうございます、@whroeder1 さん。
もうひとつは、負の数の入力方法だ。このコードでは、入力の最初だけ否定記号(-)を捕らえる必要がある。
さらに、このコードを完成させるためには(45-20)のような数字の途中でも否定記号(-)を受け入れて、引き算として扱って評価し、その結果がNumericであることをコード
全体のアイデアは、OBT_EDITのOBJPROP_TEXTプロパティに 経済カレンダー・データを受け入れて、それをそのまま数値として扱うようにすることなのです。そのために不必要に大きなコードを書かないようにするために、IsNumericの組み込み関数がかなり重要なのです。
ピリオド(.)はピリオドとゼロ(.0)が同じものと認識され、実際にはゼロ(0)なので当然数字になるはずなのですが、ピリオド(...)の数を増やしてみても数字として認識されてしまいます。そこで、ピリオド(......)の数を増やしてみましたが、やはり数字として認識されてしまいます。最初のピリオドを引用した後、追加のピリオド(......)を排除するために、ピリオド(......)のコードが必要です。
もうひとつは、負の数の入力方法だ。このコードでは、入力の最初だけ否定記号(-)を捕らえる必要がある。
さらに、このコードを完成させるためには(45-20)のような数字の途中でも否定記号(-)を受け入れて、引き算として扱って評価し、その結果がNumericであることをコード
全体のアイデアは、OBT_EDITのOBJPROP_TEXTプロパティに 経済カレンダー・データを受け入れて、それをそのまま数値として扱うようにすることなのです。そのために、不必要に大きなコードを書かないようにするために、IsNumericの組み込み関数がかなり重要なのです。
macpee:
Of course a period (.) should be numeric since (.) is regarded as the same thing with a period and zero (.0) which is in fact zero (0). Now I tried increasing the number of period (.....) and it is still recognizing it as numeric. We need the code for period (.) so as to eliminate additional period (....) once the first period has been cited in
もうひとつは、負の数の入力方法である。入力の最初だけ否定記号(-)を捕捉する必要があります。
ここにエコーがあるのか?![](https://c.mql5.com/3/118/unknown.gif)
そうそう、そういうこと。
注意しなければならないのは
________________________________
ところで、コードの一覧(ASCIIと思われる)が見当たりません。
さあ、やってみましょう。あなたの検索スキルを磨く機会をうかがっているのは知っています。
________________________________
全体のアイデアは、OBT_EDITのOBJPROP_TEXTプロパティに 経済カレンダーデータを受け入れて、それをそのまま数字として扱うようにすることです。そのために、不必要に大きなコードを書かないようにするために、IsNumericの組み込み関数がかなり重要なのです。
あなたの意図を誤解しているかもしれませんが、ユーザーがエディットボックスに日付を入力し、それをdatetimeとして解釈させたい場合(負の数に興味がある場合は違うかもしれません)、いくつかの理由からこれが最善の方法であるとは思えません。
ここにエコーがかかっていますか?
________________________________
さあ、やってみましょう。あなたの検索スキルを磨くチャンスをうかがっているのは知っています。
________________________________
あなたの意図を誤解しているかもしれませんが、ユーザーがテキストボックスに日付を入力し、それをdatetimeとして解釈したい場合(負の数に興味がある場合はそうでないかもしれません)、私はいくつかの理由でこれが最善の方法であると確信しているわけではありません。
実際には、問題の経済データには日付は含まれていない。「実績」、「予測」、「前回」、そして場合によっては「改訂」データだけである。もちろん、B(billion)、%(percent)などの記号を入力するつもりもない。スペースなしの純粋な実数だけである。このアイデアは、私が「同時リリースインデックス」と呼んでいるものを計算することです。これは、同時に発表された一連の経済データを組み合わせて、一つのデータとして見ることを意味している。私は、すべての「実績」を1つの「実績」として、すべての「予測」を1つの「予測」として組み合わせ、組み合わせた「実績」と組み合わせた「予測」等の関係を見るために、このような計算をします。
だから
例
{
StringReplace(text," ",NULL);
StringReplace(text,",",NULL);
int point_cnt = 0;
for(int i=StringLen(text)-1; i>=0; i--)
{
int this_char = StringGetChar(text,i);
if(this_char == '.')
{
point_cnt++;
if(point_cnt>1) return(false);
if(StringLen(text)<2) return(false);
}
else if(this_char == '+' || this_char == '-')
{
if(i>0) return(false);
}
else if(this_char < '0' || this_char > '9') return(false);
}
return(true);
}
もしtrueを返したら、その文字列を数値としてキャストすることができます。
だから
例
{
StringReplace(text," ",NULL);
StringReplace(text,",",NULL);
int point_cnt = 0;
for(int i=StringLen(text)-1; i>=0; i--)
{
int this_char = StringGetChar(text,i);
if(this_char == '.')
{
point_cnt++;
if(point_cnt>1) return(false);
if(StringLen(text)<2) return(false);
}
else if(this_char == '+' || this_char == '-')
{
if(i>0) return(false);
}
else if(this_char < '0' || this_char > '9') return(false);
}
return(true);
}
trueを返したら、その文字列を数字に変換することができます。