检查字符串是不是可以在 NX Knowledge Fusion 中转换为数字类型

Posted

技术标签:

【中文标题】检查字符串是不是可以在 NX Knowledge Fusion 中转换为数字类型【英文标题】:Check if a string can be converted to numeric type in NX Knowledge Fusion检查字符串是否可以在 NX Knowledge Fusion 中转换为数字类型 【发布时间】:2015-12-01 08:30:15 【问题描述】:

我有一个 NX Knowledge Fusion Check-Mate 程序来检查是否有任何包含任何类型数字的手动尺寸。

但是维度的数据类型始终是字符串列表(我只对列表的第一个位置感兴趣)。

如果列表的第一个位置包含的字符串可以转换为数字类型,即如果字符串为“200”,程序必须返回true并将维度标签附加到列表中,但如果是“22c”程序必须返回 false。

我尝试使用函数 MakeNumber(string),但该函数仅在字符串可以转换为 Number 时才有效。如果字符串不是数字,程序就会崩溃。

非常感谢!

我的 checker 函数的 dfa 代码是:

检查功能

(任何未缓存的)do_check: @ $dim_manual

          $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;    
;

【问题讨论】:

【参考方案1】:

我写了一个方法来计算一个字符串是否是一个数字

(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";
   ;
;

此方法被声明为类的属性,并且只有当 $cadena 的所有字符都可以在数字列表中找到时才应返回 true(逗号和点已作为可能的小数分隔符包含在内)。

但现在我不知道如何在 NX Check-mate 类中执行此方法。 谢谢。

【讨论】:

【参考方案2】:

我找到了解决方案。我的 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 中转换为数字类型的主要内容,如果未能解决你的问题,请参考以下文章

NX 许可证错误:许可证服务器关机或未响应。检查UGS_LICENSE_SERVER设置是不是正确。[-96]这个问题怎么解决

UG NX二次开发(C#)-模型干涉检查-UG NX自动干涉检查功能与二次开发思路

nx二次开发怎么判断选择的曲线是不是有缝隙

knowledge

UG NX二次开发(C#)-干涉检查-根据间隙集获得干涉检查对链表

Angular NX - 是不是可以在不提交代码或传递更改文件列表的情况下查看受影响的应用程序?