找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2166|回复: 8

[API建议] 关于 xdrxapi 中 string 部分函数的修改

[复制链接]

已领礼包: 264个

财富等级: 日进斗金

发表于 2016-1-29 08:55:47 | 显示全部楼层 |阅读模式

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

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

×
在 Autocad 中编程处理字符串时,strlen substr 以及 vl-string * 部分函数中处理中文时,一个中文字符都是按两个自交,xdrxapi 中的 xdrx_string 部分也是这样的规则,能不能改成一个中文字符按一个字节计算,这样省得很多应用中单独计算中文字符长度,可能包括下面几个函数

xdrx_string_length
xdrx_string_substr


xdrx_string_Find
xdrx_string_FindOneOf
xdrx_string_Insert
xdrx_string_left
xdrx_string_mid
xdrx_string_Remove
xdrx_st_ing_right


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

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-1-29 09:02:44 | 显示全部楼层
UNICODE 编码方式下一个中文是一个字符,一个西文也是一个字符,AutoCAD 从 2007 开始都是 Unicode ,不知道问什么 autolisp 还是 ANSI 方式

点评

AUTOLISP 为的是要兼容老的程序吧。  详情 回复 发表于 2016-7-1 21:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2016-1-29 09:32:39 | 显示全部楼层
还是在LISP函数库里面写个处理比较好,底层的不变。

点评

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-1-29 09:38:00 | 显示全部楼层
XDSoft 发表于 2016-1-29 09:32
还是在LISP函数库里面写个处理比较好,底层的不变。

2006 以上有了 AcString 类

  1. static int ads_cstrlen(void)
  2.         {
  3.                 resbuf *args=acedGetArgs();
  4.                 if (args==NULL || args->restype!=RTSTR)
  5.                 {
  6.                         return RTNORM;
  7.                 }
  8.                 AcString txt(args->resval.rstring);                 
  9.                 return acedRetInt(txt.tcharLength());
  10.         }
  11.         static int ads_csubstr(void)
  12.         {
  13.                 resbuf *args=acedGetArgs();
  14.                 if (args==NULL || args->restype!=RTSTR)
  15.                 {
  16.                         return RTNORM;
  17.                 }
  18.                 AcString txt(args->resval.rstring);
  19.                 int len=txt.tcharLength();
  20.                 args=args->rbnext;
  21.                 if (args==NULL || args->restype!=RTSHORT)
  22.                 {
  23.                         return RTNORM;
  24.                 }
  25.                 int nStart=args->resval.rint;
  26.                 if (!(nStart<len)|| nStart==len-1)
  27.                 {
  28.                         acedRetStr(txt);
  29.                         return RTSTR;
  30.                 }
  31.                 args=args->rbnext;
  32.                 if (args==NULL)
  33.                 {
  34.                         AcString ret=txt.substr(0,nStart);
  35.                         return acedRetStr(ret);
  36.                 }
  37.                 else
  38.                 {
  39.                         if ( args->restype!=RTSHORT)
  40.                         {
  41.                                 return RTNORM;
  42.                         }
  43.                         int nNum=args->resval.rint;
  44.                         if (nNum<1)
  45.                         {
  46.                                 return RTNORM;
  47.                         }
  48.                         return acedRetStr(txt.substr(nStart,nNum));
  49.                 }
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2016-7-1 21:34:49 来自手机 | 显示全部楼层
api的string部分已经按UNICODE处理了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2016-7-1 21:41:04 | 显示全部楼层
是的,xdrx_string_length , xdrx_string_mid,xdrx_string_substr.....汉字都作为一个字符看待了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2016-7-1 21:43:03 | 显示全部楼层
csharp 发表于 2016-1-29 09:02
UNICODE 编码方式下一个中文是一个字符,一个西文也是一个字符,AutoCAD 从 2007 开始都是 Unicode ,不知 ...

AUTOLISP 为的是要兼容老的程序吧。

点评

其实只要有中文的就按 UNICODE 处理才方便  详情 回复 发表于 2016-7-1 21:46
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2016-7-1 21:46:32 | 显示全部楼层
XDSoft 发表于 2016-7-1 21:43
AUTOLISP 为的是要兼容老的程序吧。

其实只要有中文的就按 UNICODE 处理才方便

点评

可能老的LISP程序,处理中文的时候都用2字节处理,积累了海量程序了,如果改成UNICODE,可能会造成很多程序出错了。他们应该单独提供个UNICODE的函数。  详情 回复 发表于 2016-7-1 21:48
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2016-7-1 21:48:35 | 显示全部楼层
eachy 发表于 2016-7-1 21:46
其实只要有中文的就按 UNICODE 处理才方便

可能老的LISP程序,处理中文的时候都用2字节处理,积累了海量程序了,如果改成UNICODE,可能会造成很多程序出错了。他们应该单独提供个UNICODE的函数。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 13:37 , Processed in 0.206559 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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