检查字符串是否可以在 NX Knowledge Fusion 中转换为数字类型
Check if a string can be converted to numeric type in NX Knowledge Fusion
我有一个 NX Knowledge Fusion Check-Mate 程序来检查是否有任何手动维度包含任何类型的数字。
但是维度的数据类型始终是字符串列表(我只对列表的第一个位置感兴趣)。
如果列表第一个位置包含的字符串可以转换为数字类型,即如果字符串为“200”,则程序必须return为真并将维度标签附加到列表,但是如果是“22c”,程序必须 return false。
我尝试使用函数 MakeNumber(string),但此函数仅在字符串可以转换为数字时才有效。如果字符串不是数字,程序就会崩溃。
非常感谢!
我的检查功能的dfa代码是:
检查器功能
(任何未缓存的)do_check:
@{
$dim_manual << mqc_askManualDimensions();
$dim_log <<loop
{
for $each in $dim_manual;
for $is_sleep is mqc_isSleepObject( $each );
for $is_condemned is mqc_isCondemnedObject( $each );
#I print the value i want to check
do ug_printvalue($each);
for $text is mqc_askDimensionManualText( $each );
do ug_printvalue(nth(0,$text));
#I check the type of the dimension content --> String
#If nth(0,$text) is Number type, typecheck returns true
#but always return false because nth(0,$text) is String type!
for $is_number is typecheck(nth(0,$text), Number);
do ug_printvalue($is_number);
do ug_printvalue(TypeName(nth(0,$text)));
#I try to convert the String in a Number. If the String can not be
#converted the program crashes!!
for $n is MakeNumber(nth(0,$text));
do ug_printvalue($n);
#I want to append in the error log only the manual dimensions that
#contains ONLY a number.
if (!$is_sleep & !$is_condemned & $is_number)
append {$each};
};
if !empty?( $dim_log ) Then
@{
$log_msg << @{If (log_msg:="") Then "" Else log_msg:+"~n";} +
mqc_sprintf("Found %s dimension(s) with manual text.", Stringvalue(Length($dim_log)));
ug_mqc_log( nth( log_type:, log_type_option: ), $dim_log, $log_msg );
}
Else donothing;
};
我写了一个方法来计算字符串是否是数字
(List) numbers: {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "." , ","};
(Method Boolean) is_numeric:(String $cadena)
@{
$is_a_number << loop {
for $text_split is SplitString($cadena,"");
do ug_printMessage($text_split);
for $i from 0 to Length($text_split);
for $exist_number is Find(nth($i,$text_split),numbers:);
do ug_printvalue($i);
do ug_printvalue($exist_number);
return is $exist_number != "No Value";
};
};
此方法声明为 class 的属性,并且仅当 $cadena 的所有字符都可以在数字列表中找到时才应 return 为真(逗号和点已包含为可能的小数点分隔符)。
但现在我不知道如何在 NX Check-mate 中执行此方法 class。
谢谢
我找到了解决办法。我的 dfa 方法确定给定字符串是否可以解析为数字。
( List ) numbers: {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "." , ","};
( Method Boolean) vh_numeric_string:(String $cadena) @{
$is_a_number << loop {
for $text_split is SplitString($cadena,"");
for $i from 1 to Length($text_split);
for $exist_number is Find(nth($i,$text_split),numbers:);
if ($exist_number = NoValue) return False;
return is True;
};
};
当在我的 dfa 文件的 do_check 函数中调用此方法时,结果可以存储在循环变量中,如下所示:
for $is_number is vh_numeric_string:(nth(0,$text));
我有一个 NX Knowledge Fusion Check-Mate 程序来检查是否有任何手动维度包含任何类型的数字。
但是维度的数据类型始终是字符串列表(我只对列表的第一个位置感兴趣)。
如果列表第一个位置包含的字符串可以转换为数字类型,即如果字符串为“200”,则程序必须return为真并将维度标签附加到列表,但是如果是“22c”,程序必须 return false。
我尝试使用函数 MakeNumber(string),但此函数仅在字符串可以转换为数字时才有效。如果字符串不是数字,程序就会崩溃。
非常感谢!
我的检查功能的dfa代码是:
检查器功能
(任何未缓存的)do_check: @{ $dim_manual << mqc_askManualDimensions();
$dim_log <<loop
{
for $each in $dim_manual;
for $is_sleep is mqc_isSleepObject( $each );
for $is_condemned is mqc_isCondemnedObject( $each );
#I print the value i want to check
do ug_printvalue($each);
for $text is mqc_askDimensionManualText( $each );
do ug_printvalue(nth(0,$text));
#I check the type of the dimension content --> String
#If nth(0,$text) is Number type, typecheck returns true
#but always return false because nth(0,$text) is String type!
for $is_number is typecheck(nth(0,$text), Number);
do ug_printvalue($is_number);
do ug_printvalue(TypeName(nth(0,$text)));
#I try to convert the String in a Number. If the String can not be
#converted the program crashes!!
for $n is MakeNumber(nth(0,$text));
do ug_printvalue($n);
#I want to append in the error log only the manual dimensions that
#contains ONLY a number.
if (!$is_sleep & !$is_condemned & $is_number)
append {$each};
};
if !empty?( $dim_log ) Then
@{
$log_msg << @{If (log_msg:="") Then "" Else log_msg:+"~n";} +
mqc_sprintf("Found %s dimension(s) with manual text.", Stringvalue(Length($dim_log)));
ug_mqc_log( nth( log_type:, log_type_option: ), $dim_log, $log_msg );
}
Else donothing;
};
我写了一个方法来计算字符串是否是数字
(List) numbers: {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "." , ","};
(Method Boolean) is_numeric:(String $cadena)
@{
$is_a_number << loop {
for $text_split is SplitString($cadena,"");
do ug_printMessage($text_split);
for $i from 0 to Length($text_split);
for $exist_number is Find(nth($i,$text_split),numbers:);
do ug_printvalue($i);
do ug_printvalue($exist_number);
return is $exist_number != "No Value";
};
};
此方法声明为 class 的属性,并且仅当 $cadena 的所有字符都可以在数字列表中找到时才应 return 为真(逗号和点已包含为可能的小数点分隔符)。
但现在我不知道如何在 NX Check-mate 中执行此方法 class。 谢谢
我找到了解决办法。我的 dfa 方法确定给定字符串是否可以解析为数字。
( List ) numbers: {"1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "." , ","};
( Method Boolean) vh_numeric_string:(String $cadena) @{
$is_a_number << loop {
for $text_split is SplitString($cadena,"");
for $i from 1 to Length($text_split);
for $exist_number is Find(nth($i,$text_split),numbers:);
if ($exist_number = NoValue) return False;
return is True;
};
};
当在我的 dfa 文件的 do_check 函数中调用此方法时,结果可以存储在循环变量中,如下所示:
for $is_number is vh_numeric_string:(nth(0,$text));