找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 868|回复: 10

[编程申请]:取得字符串和数字的LISP程序

[复制链接]
发表于 2002-11-23 13:04:45 | 显示全部楼层 |阅读模式

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

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

×
例:
   str为“A23.2B"
   通过LISP函数其结果为S1="A"       Num=23.2      S2="B"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-11-23 17:01:44 | 显示全部楼层

Re: [编程申请]:取得字符串和数字的LISP程序

最初由 fundoll 发布
[B]例:
   str为“A23.2B"
   通过LISP函数其结果为S1="A"       Num=23.2      S2="B" [/B]


以str=“A23.2B"为例
  1. (setq S1 (substr str 1 1))
  2. (setq Num (substr str 2 4))
  3. (setq S2 (substr str 6 1))

这时,Num还是字符串类型,想要将它转换为整数类型还要
  1. (atoi num)
复制代码

不知道你要取值的字符串是否都是固定字符个数的,如果不是,那还应该有些小的变化。
在Num还是字符串类型时,如果想将合并字符串可以是:
  1. (setq str (strcat S1 Num S2))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-23 19:01:40 | 显示全部楼层
谢谢yi.gao ;
               
           这字符串是作为COMMAND下的长参数,也有可能是这样的形式“A1B2.2C56.6"
           要求经过Lisp函数处理后为: A=1   B=2.2   C=56.6
           上文所提Num是不固定长度实数数值,参数的个数也不固定如“A22.2B33.3C1D4.0"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2002-11-23 22:20:23 | 显示全部楼层
看看下面的代码是否符合你的要求:

程序运行后,对变量A、B、C按照要求赋值:

运行结果:

  1. _$ (string_set "A1B2.2C56.6")
  2. nil
  3. _$ A
  4. 1.0
  5. _$ C
  6. 56.6
  7. _$ B
  8. 2.2
  9. _$
复制代码

程序代码:

  1. (defun string_set (str_in / lst1 str_wk)
  2.   (setq lst1 (mixstring->list str_in))
  3.   (foreach x lst1
  4.     (if str_wk
  5.       (progn
  6.         (set (read str_wk) (atof x))
  7.         (setq str_wk nil)
  8.       )
  9.       (setq str_wk x)
  10.     );if
  11.   );foreach
  12. );end


其中,(mixstring->list)将输入字符串按照要求分解成字符串表,
具体请参考下面的文章:
http://www.xdcad.net/forum/showthread.php?threadid=14986
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-11-24 20:43:47 | 显示全部楼层

谢谢各位网友!!

正如fylinwater 网友所贴,我通过ASCII码来一个个来判别,
如“0—9”的ASCII码为30—39,字符是多少,小数点是多少,
一个一个判断,弄的我头昏脑胀。

     Qlin  兄写的Code 条理很清析,可以让我减少 许多工作量!

     还有一点请问Qlin兄,

        如“A2.1BC22"      使A=2.1   B=已设值  C=22
        因B后无参数   要使B为已设值,以前的的代码怎么修改

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

使用道具 举报

发表于 2002-11-24 22:24:34 | 显示全部楼层
“A2.1BC22"有些难判断,因为mixstring->list是按照数字<->字母间隔
这样的规则来判断。不知道这个“A2.1BC22"是在什么样的环境下
生成的?能否修改生成代码,使得"B"后面跟随一个与其它数值不重复
的标志性数值?比如说,你其它的数值都是正数,那可写成"A2.1B-1C22",
这样,当B后跟随值为-1时,可以使用已有值来赋值。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2002-12-6 08:57:35 | 显示全部楼层
谢谢各位网友!!
用wcmatch问题解决了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2002-12-9 20:46:18 | 显示全部楼层
其实就是一位网友写的“strdiv”+ QLin在上面写的程序

(defun string_set  (str_in / x lst1 str_var)
  (setq lst1 (mixstring->list str_in))
  (foreach x  lst1
    (if        (wcmatch x "@")
      (progn
        (setq str_var x)
        )
      )

    (if        (= nil (wcmatch x "@"))
      (progn
        (set (read str_var) (atof x))
        )
      )

    )                                        ;foreach
  )                                        ;end

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

使用道具 举报

发表于 2002-12-9 23:49:43 | 显示全部楼层
题目是自己出的,格式是自己定的,
困难是自己招的,问题是自己找的。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-28 23:52 , Processed in 0.337709 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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