找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1999|回复: 7

[求助]:读出层里单行文本的内容(整数字符串),并取得内容里的最大数值!超急!

[复制链接]
发表于 2004-7-23 10:29:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
对某层的的N个圆已经进行了编号排序,如: 1,2,3,4.....N.
其中这个编号是用单行文本标记的,
现在已经读出这个层上的所有单行文本实体,但不知如何才能取得这个最大值N值是多少呢??
如下程序:

                        for(pIterator->start();!pIterator->done();pIterator->step())//遍历整个数据库
                        {
                                AcDbEntity *entity=NULL;
                                if(pIterator->getEntity(entity,AcDb::kForRead)!=Acad::eOk)//打开实体为可读
                                {
                                        delete pIterator;
pIterator=NULL;
                                        pBlockTableRecord->close();
                                        return;
                                }
                               
                                if(strcmp(entity->layer(),numLayerName) == 0) //指定层上的实体
                                {
                                        if(entity->isKindOf(AcDbText::desc())) //为文本实体
                                        {
                                                这里面应如何写代码呢?
                                        }

                                }
超急,望有位学长能帮一下小弟,实在没有时间个人去进修了.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-7-24 21:11:07 | 显示全部楼层
AcDbText *ptxt=(AcDbText*)entity;
char *pcontent=ptxt->textString();
int Nmax=0;
int N=atoi(pcontent);
if(N>Nmax)
{
    Nmax=N;
}
////////
Nmax 最后就是你要的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-24 22:47:17 | 显示全部楼层

  1. [COLOR=Blue]
  2. int         num, numMax=INT_MIN  /* -2147483648*/;
  3. char     *pText;
  4. [/COLOR]
  5. for(pIterator->start();!pIterator->done();pIterator->step())//遍历整个数据库
  6. {
  7.     AcDbEntity *entity=NULL;
  8.     if(pIterator->getEntity(entity,AcDb::kForRead)!=Acad::eOk)//打开实体为可读
  9.     {
  10.         delete pIterator;
  11.         pIterator=NULL;
  12.         pBlockTableRecord->close();
  13.         return;
  14.     }

  15.     if (strcmp(entity->layer(),numLayerName) == 0) //指定层上的实体
  16.     {
  17.         if(entity->isKindOf(AcDbText::desc())) //为文本实体
  18.         {
  19. [COLOR=Blue]
  20.                ///   这里面应如何写代码呢?
  21.               pText=ptxt->textString();
  22.               num =atoi(pText);
  23.               acutDelString (pText);  [COLOR=Red]  // 必须 清除动态字符串 pText[/COLOR]
  24.               if (num > numMax)  numMax = num;
  25. [/COLOR]
  26.         }
  27.    }
  28. }

  29. [COLOR=Blue]//现在, numMax中的值就是你要求的[/COLOR]

复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-7-26 14:26:39 | 显示全部楼层
谢谢各位学长的帮助, ishou写得还真清楚咯,感动,
不过我这里还有一些问题要请教ishou学长:


B)以前ishou老是说我不该用strcmp()这个函数,那它与stricmp()这个函数又有什么样的内在区别呢??

我看过帮助,好像两者都是字符串的比较,至于区别,还愿详闻其解呢???这个问题我问过你一次了,

可没看到回复.

C)我在创建选择集时,自己建了一个过滤链表,如下:

        struct resbuf eb1; //声明变量

        eb1.restype = 0;
        strcpy(tmp, "CIRCLE");
        eb1.resval.rstring = tmp;
acutDelString(tmp);  //ishou学长的风格,我是直接strcpy(eb1.resval.rstring,"CIRCLE")的. 这到底怎么不好法,我也不太清楚:)

       
        eb1.restype = 40;
        eb1.resval.rreal = inputRadius; //用户输入的圆半径
        eb1.rbnext = NULL;

这里既然创建了,程序结束时,我想应要释放这个过滤表才对,但我不知该如何释放它,难道我理解错误,不需要释放吗??
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-26 21:49:09 | 显示全部楼层
B)我应该没有老是说你不该用strcmp()这个函数,大概是提醒你在某个地方不该使用strcmp()、
而要用stricmp(),比如,判断操作者输入的字符串。strcmp() 区分字母大小写,而stricmp()则不
区分,操作者的键盘输入往往是比较随意的,实用的软件一般上不该要求操作者必须专用大写、
或专用小写输入。

  1. char   *sa ="ABC";
  2. char   *sb ="abc";
  3.     strcmp(sa, sb);  不会返回 0,而
  4.     stricmp(sa, sb); 则返回 0。
复制代码


C)
struct resbuf eb1; //声明变量

eb1.restype = 0;
strcpy(tmp, "CIRCLE");   //你这里的tmp在前面是否有初始化,并对应有效内存地址?否则,不能使用strcpy() [/COLOR]

eb1.resval.rstring = tmp;
acutDelString(tmp); //ishou学长的风格,我是直接strcpy(eb1.resval.rstring,"CIRCLE")的.
这到底怎么不好法,我也不太清楚:)


// strcpy(eb1.resval.rstring,"CIRCLE");  ???
ebl.resvsal.rstring 没有初始化(指向有效内存地址空间)

使用 函数acutDelString()必须谨慎,该函数是用于释放 由函数acutNewString()或
acutNewBuffer()得到的字符串。由ARX函数返回的动态字符串往往也要求使用acutDelString()来
释放。如果字符串是由 malloc()或new 等函数动态获得,不要用acutDelString()释放,必须使用
相应的free() 或delete 释放。
[/COLOR]

eb1.restype = 40;
eb1.resval.rreal = inputRadius; //用户输入的圆半径
eb1.rbnext = NULL;
// 为什么要覆盖 eb1各元素的值。[/COLOR]

--------------
你这里大概是要建立过滤器:获得半径为设定值inputRadius的圆吧?有两种方法:

  1. 1)建立动态数据链:
  2.      struct resbuf  *filter;
  3.      filter = acutBuildList (RTDXF0, "CIRCLE", 40, inputRadius, 0);
  4.      ......
  5.      acutRelRb(filter);  //最后,要释放filter;该函数不仅释放成串的resbuf的各节点空间,
  6.                                   //如果节点还拥有字符串时,会同时自动释放字符串。


复制代码


  1. 2)使用固定型resbuf 节点连接成串:
  2.     struct resbuf   B1, B2;

  3.      B1.restype = 0;
  4.      B1.resval.rstring = "CIRCLE";
  5.      B1.rbnext = &B2;

  6.      B2.restype = 40;
  7.      B2.resval.rreal = inputRadius;
  8.      B2.rbnext = NULL;

  9.      ....把 &B1代入 ssget()即可。

  10.      这里不需要释放 数据链。字符串"CIRCLE"是程序共享静态字符串,不需要、也不能去释放,
  11. 否则程序运行可能崩溃!

  12.      如果节点数不多,使用该方法程序运行比较有效率。

复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-18 11:42:28 | 显示全部楼层
最近也正想知道,在建模中需要
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2015-3-15 22:56:09 | 显示全部楼层
:@学习了!!!!!!!!!!!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

已领礼包: 10个

财富等级: 恭喜发财

发表于 2020-5-16 19:00:14 | 显示全部楼层
打开了额
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-21 23:38 , Processed in 0.213596 second(s), 46 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表