IF…THEN…ELSEIF…ELSE…ENDIFおよび属性品質
- Last UpdatedOct 08, 2024
- 1 minute read
属性値を同じ型の別の属性にコピーすると、属性の品質もコピーされます。これは、I/O 属性で作業する際に特に重要です。たとえば、以下の 2 つのステートメントは値と品質の両方をコピーします。
me.Attr2 = me.Attr1;
me.Attr2.value = me.Attr1.value;
属性の品質が BAD の場合に値だけをコピーするには、一時変数を使用して値を格納できます。以下に例を示します。
Dim temp as Integer;
temp = me.Attr1;
me.Attr2 = temp;
Attr1 <> Attr2 のような比較があり、いずれかの属性の品質が BAD の場合、IF 制御ブロック内のステートメントは実行されません。たとえば、Attr1 の品質が BAD である場合を考えてみます。
if me.Attr1<> me.Attr2 then
me.Attr2 = me.Attr1;
ENDIF;
このスクリプトでは、ステートメント me.Attr2 = me.Attr1 は実行されません。Attr1 の品質が BAD で、BAD 品質値と Good 品質値との比較は定義されません(不可能です)。
推奨されるアプローチは、次の例に示すように最初に Attr1 の品質を検証することです。
if(IsBad(me.Attr1))で終わります。
LogMessage(「Attr1の品質が悪く、その値はAttr2」にコピーされません)。
else
if me.Attr1<> me.Attr2 then
me.AttrA2 = me.Attr1;
ENDIF;
ENDIF;
品質を検証する別の方法は、"==" 演算子を使用することです。
Me.Attr1==TRUEの場合
または、"value" プロパティを簡素化された IF THEN ステートメントに追加することができます。
IfMe.Attr1.value
上記のいずれかのメソッドを使用してデータ品質を検証した場合、スクリプトは正常に実行します。