zoukankan      html  css  js  c++  java
  • 获取NX特征名称(无时间戳)

    NX获取特征名称使用UF_MODL_ask_feat_name这个接口,接口说明里有一段话:

    Returns a character string containing the feature type and time stamp of the feature passed into the function. The time stamp refers to the order of creation. For example, if you created two blocks they would be time stamped as BLOCK(0) and BLOCK(1). 

    所以在获取名称时,NX会根据时间顺序自动加上序号,就像上面所说的BLOCK(0)、BLOCK(1)等。那如果想获取无时间戳的名称怎么实现呢?NX提供了一个获取特征时间戳的接口UF_MODL_ask_time_stamp_of_feature,由此可以获取时间序号进行比对,然后从名称中将时间戳去除掉即可。代码实现如下:

     1 char* strrstr(const char *dst, const char *src)
     2 {
     3     if ((NULL == dst) || (NULL == src))
     4     {
     5         return (char*)dst;
     6     }
     7 
     8     const char *pdst = dst;
     9     const char *psrc = src;
    10     char *right= NULL;
    11     while (*dst)
    12     {
    13         while (*pdst == *psrc)
    14         {
    15             if (*pdst== '')
    16                 return right=(char *)dst;
    17             else
    18             {
    19                 pdst++;
    20                 psrc++;
    21             }
    22         }
    23         if (*psrc == '')
    24             right = (char *)dst;
    25         pdst = ++dst;
    26         psrc = src;
    27     }
    28 
    29     return right;
    30 }
    31 
    32 void UF_MODL_ask_feat_name_no_stamp(tag_t feature_tag,char* name)
    33 {
    34     if ((NULL_TAG == feature_tag) || (NULL == name))
    35     {
    36         return ;
    37     }
    38 
    39     char* featureName = NULL;
    40     UF_MODL_ask_feat_name(feature_tag,&featureName);
    41 
    42     if (NULL == featureName)
    43     {
    44         return;
    45     }
    46 
    47     int index = 0;
    48     UF_MODL_ask_time_stamp_of_feature(feature_tag,&index);
    49     char timeStamp[35] = {0};
    50     sprintf_s(timeStamp,"(%d)",index);
    51 
    52     //应该从后往前找,而非strstr
    53     char* subStr = strrstr(featureName, timeStamp);
    54     if (subStr)
    55     {
    56         memmove(name, featureName, subStr - featureName);
    57     }
    58 
    59     UF_free(featureName);
    60 }

    当然还有更暴力的手法,就是获取名称之后,从后往前找'(',找到之后,将'('之前的内容返回即是名称,这个方法代码更简洁

     1 void UF_MODL_ask_feat_name_no_stamp(tag_t feature_tag,char* name)
     2 {
     3     if ((NULL_TAG == feature_tag) || (NULL == name))
     4     {
     5         return ;
     6     }
     7 
     8     char* featureName = NULL;
     9     UF_MODL_ask_feat_name(feature_tag,&featureName);
    10 
    11     if (NULL == featureName)
    12     {
    13         return;
    14     }
    15 
    16     //从后往前找'('
    17     char* subStr = strrchr(featureName, '(');
    18     if (subStr)
    19     {
    20         memmove(name, featureName, subStr - featureName);
    21     }
    22 
    23     UF_free(featureName);
    24 }

    以上方法任选其一均可,由于两种方法都依赖'('字符,且NX添加的时间戳必须是在名称最后,所以从鲁棒性来讲是一样的,我自己更偏向第二种方法。期待NX以后提供一个可以获取无时间戳的接口。

    作者:快雪
    本文版权归作者所有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    通过python来获取网页状态
    php多域名跳转nginx
    mybatis-plus主键策略
    mybatis-plus ActiveRecord模式
    mybatis-plus-Cud操作
    mybatis-plus高级操作
    mybatis-plus入门
    ☕【Java技术指南】「序列化系列」深入挖掘FST快速序列化压缩内存的利器的特性和原理
    虚拟机研究系列-「GC本质底层机制」SafePoint的深入分析和底层原理探究指南
    👊 Spring技术原理系列(7)带你看看那些可能你还不知道的Spring特性技巧哦!
  • 原文地址:https://www.cnblogs.com/kuaixue/p/12753437.html
Copyright © 2011-2022 走看看