Проверьте, можно ли преобразовать строку в числовой тип в NX Knowledge Fusion

У меня есть программа NX Knowledge Fusion Check-Mate, чтобы проверить, есть ли какое-либо ручное измерение, содержащее число любого типа.

Но тип данных измерения - это всегда список строк (меня интересует только первая позиция списка).

Если строка, содержащаяся в первой позиции списка, может быть преобразована в тип Number, т. Е. Если строка "200", программа должна вернуть true и добавить тег измерения в список, но если это "22c", программа должна вернуть ложь.

Я пытался с функцией MakeNumber(строка), но эта функция работает только в том случае, если строку можно преобразовать в число. Если строка не является числом, программа вылетает.

Спасибо большое!

Мой код 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;    
};

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

Когда этот метод вызывается в функции do_check моего dfa-файла, результат может быть сохранен в переменной цикла следующим образом:

for $is_number is vh_numeric_string:(nth(0,$text));

Я написал метод, который вычисляет, является ли строка или нет число

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

Этот метод объявлен как атрибут класса и должен возвращать true только в том случае, если все символы $cadena могут быть найдены в числах List (запятая и точка включены в качестве возможных десятичных разделителей).

Но сейчас я не знаю, как выполнить этот метод в классе NX Check-mate. Благодарю.

Другие вопросы по тегам