找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1473|回复: 7

[LISP函数]:LISP编程问题之三

[复制链接]
发表于 2002-7-4 11:07:52 | 显示全部楼层 |阅读模式

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

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

×
命令: (getenv "ACAD")
"C:\\PROGRAM FILES\\ACAD2000\\support;C:\\PROGRAM
FILES\\ACAD2000\\fonts;C:\\PROGRAM FILES\\ACAD2000\\help;C:\\PROGRAM
FILES\\ACAD2000\\express;C:\\PROGRAM FILES\\ACAD2000\\lisp2000;"

请教如何把上面返回的字符串转换成如下表:
("C:\\PROGRAM FILES\\ACAD2000\\support" "C:\\PROGRAM FILES\\ACAD2000\\fonts"
"C:\\PROGRAM FILES\\ACAD2000\\help" "C:\\PROGRAM FILES\\ACAD2000\\express"
"C:\\PROGRAM FILES\\ACAD2000\\lisp2000")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-7-4 11:45:13 | 显示全部楼层
去明经通道下载一个lisp函数,可以由字串
转为表,根据某个字符,如这里的";"
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 23个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-7-4 17:15:14 | 显示全部楼层

Re: [LISP函数]:LISP编程问题之三

最初由 hqd9639 发布
[B]命令: (getenv "ACAD")
"C:\\PROGRAM FILES\\ACAD2000\\support;C:\\PROGRAM
FILES\\ACAD2000\\fonts;C:\\PROGRAM FILES\\ACAD2000\\help;C:\\PROGRAM
FILES\\ACAD2000\\express;C:\\PROGRAM FILES\\ACAD2000\\... [/B]


看看XDRX_API的字符串处理函数,所有的字符串应用应该都可以满足了。

你可以使用:

118. xdrx_str_tok   

功能:将由给定分割字符串分割的字符串组成表,若是"",忽略

调用格式:(xdrx_str_tok <字符串> <分割字符串>)

返回值:字符串表

示例:(xdrx_str_tok "abc;;def;;efg" ";;")=("abc" "def" "efg")
     (xdrx_str_tok "abc;;def;;efg" ";")=("abc" "def" "efg")
     (xdrx_str_tok "abcddefgddzdf" "d")=("abc" "efg" "z" "f")
     (xdrx_str_tok "abcddefgddzdf" "dd")=("abc" "efg" "z" "f")
     (xdrx_str_tok ",1,2" ",")=("1" "2)  ;前面的""忽略
     (xdrx_str_tok ",1,2,,,3,")=("1" "2" "3") ;;""忽略




XDRX_API关于字符串处理的函数

103. xdrx_str_right

功能:返回字符串指定位置右边的所有字符串(类似 Basic 语言的 RIGHT$ 功能).

调用格式:(xdrx_str_right <字符串> <位置>)

说明:字符串位置从0开始

返回值:字符串

示例:a="建筑设计"
      (xdrx_str_right a 4)="设计"

104. xdrx_str_left

功能:返回字符串指定位置左边的所有字符串(类似 Basic 语言的 LEFT$ 功能).

调用格式:(xdrx_str_right <字符串> <位置>)

说明:字符串位置从0开始

返回值:字符串

示例:a="建筑设计"
      (xdrx_str_left a 4)="建筑"

105. xdrx_str_mid

功能:返回字符串从中间指定位置开始,指定长度的字符串(类似 Basic 语言的MID$)

调用格式:(xdrx_str_mid <字符串> <开始位置> <长度>)

说明:字符串位置从0开始

返回值:字符串

示例:a="建筑设计"
      (xdrx_str_mid a 4 2)="计"

106. xdrx_str_SpanIncluding

功能:从字符串位置0开始查找,提取首次仅仅出现在匹配字符表里的连续的子字符串.

调用格式:(xdrx_str_SpanIncluding <字符串> <匹配字符串>)

返回:字符串,没发现返回""

示例:a="acgwfa"
      (xdrx_str_SpanIncluding a "abc")="ac"
      (xdrx_str_SpanIncluding a "acw")="ac"
      (xdrx_str_SpanIncluding a "cgw")=""

说明:该函数从第一个字符(0)开始找连续的出现在匹配字符串中的字符。不能从中间开始。

107. xdrx_str_SpanExcluding

功能:从字符串位置0开始查找,提取首次仅仅出现在匹配字符表里的连续的子字符串.
Extracts a substring that contains only the characters not in a set.

调用格式:(xdrx_str_SpanExcluding <字符串> <匹配字符串>)

返回:字符串,没发现返回""

说明:使用该函数在字符串中寻找第一个匹配字符(在匹配字符串中),然后返回该位置前的所有字符串
      如果没有发现,返回空字符串。

示例:a="acg;w,fa"
      (xdrx_str_SpanIncluding a ";,")="acg"
      (xdrx_str_SpanIncluding a ",")="acg;w"

108. xdrx_str_Reverse

功能:将字符串反向

调用格式:(xdrx_reverse <字符串>)

返回值:字符串

示例:(xdrx_reverse "abc")="cba"

109. xdrx_str_subst

功能:将字符串中的第一次找到的旧串用新串代替。识别大小写

调用格式:(xdrx_str_subst <新字符串> <旧字符串> <原字符串>)

返回值:字符串

示例:(xdrx_str_subst "abc" "aa" "baadeaa")="babcdeaa"

说明:仅仅替换一次。即使还有相同的旧串存在。

110. xdrx_str_replace

功能:将字符串中所有找到的旧字符串用新字符串代替。识别大小写

调用格式:(xdrx_str_replace <字符串> <旧字符串><新字符串>)

返回值:字符串

示例:(xdrx_str_subst "baadeaa" "aa" "abc")="babcdeabc"

111. xdrx_str_Find

功能:在给定的字符串中查找子串,识别大小写

调用格式:(xdrx_str_find <字符串> <子串>)

返回值:整数值(子串的位置),起始是0,若没找到,返回NIL

112. xdrx_str_findoneof

功能:在字符串中寻找第一在匹配字符串中的字符,并返回位置。区分大小写

调用格式:(xdrx_str_findoneof <字符串> <匹配字符串>)

返回值:若找到,返回整数值(位置,基于0),否,返回NIL.

示例:(xdrx_str_findoneof "abcde" "xd")=3  ;匹配的字符是d


113. xdrx_str_Insert

功能:在指定位置插入子字符串

调用格式:(xdrx_str_insert <字符串> <位置> <子字符串>)

返回值:字符串

114. xdrx_str_Remove

功能:删除指定位置,给定长度的子串

调用格式:(xdrx_str_remove <字符串> <起始位置> <长度>)

返回值:字符串

115. xdrx_str_TrimRight

功能:删除字符串尾部的出现的所有连续的子字符串,若不给子字符串参数,则
      删除字符串尾部的空格,TAB符号,换行符号

调用格式:(xdrx_str_trimright <字符串> [子字符串])

返回值:字符串

示例:(xdrx_str_trimright "afaf!!!!" "!")="afaf"
      (xdrx_str_trimright "afaf    " " ")="afaf"
      (xdrx_str_trimright "afaf   ")="afaf"   ;不带参数
      (xdrx_str_trimright "afaf  \r\n  ")="afaf"  ;不带参数
      
116. xdrx_str_TrimLeft

功能:删除字符串头部的所有连续出现的子字符串,若不给子字符串参数,则
      删除字符串头部的空格,TAB符号,换行符号。
      
调用格式:(xdrx_str_trimleft <字符串> [子字符串])

返回值:字符串

示例:(xdrx_str_trimleft "\r\n建筑" "\r\n")="建筑"
     (xdrx_str_trimleft "\r\n建筑")="建筑"  ;不带参数
     (xdrx_str_trimleft "ababdddd" "ab")="dddd"

117. xdrx_str_format

功能:将任意个数的字符串,整数,长整数,实数连接成一个字符串

调用格式:(xdrx_str_format <参数1> [参数2]...[参数n])

返回值:字符串

说明:参数N: 可以是字符串,整数,长整数,实数之一
     对于实数,后面跟的整数参数若小于等于5,作为小数点后的位数。
     若不给整数或大于5,则对实数求整。

示例:(xdrx_str_format "abc" 1 2.332 5)="abc125"
     (xdrx_str_format 1 "abc" 2.332 2 "b")="1abc2.33b"
     
118. xdrx_str_tok   

功能:将由给定分割字符串分割的字符串组成表,若是"",忽略

调用格式:(xdrx_str_tok <字符串> <分割字符串>)

返回值:字符串表

示例:(xdrx_str_tok "abc;;def;;efg" ";;")=("abc" "def" "efg")
     (xdrx_str_tok "abc;;def;;efg" ";")=("abc" "def" "efg")
     (xdrx_str_tok "abcddefgddzdf" "d")=("abc" "efg" "z" "f")
     (xdrx_str_tok "abcddefgddzdf" "dd")=("abc" "efg" "z" "f")
     (xdrx_str_tok ",1,2" ",")=("1" "2)  ;前面的""忽略
     (xdrx_str_tok ",1,2,,,3,")=("1" "2" "3") ;;""忽略

119. xdrx_str_split

功能:同116,xdrx_str_tok,不同在于对于""不忽略

示例:(xdrx_str_split ",1,2" ",")=("" "1" "2")

120. xdrx_str_join

功能:对给定的表中的每项插入给定的字符串。返回组成的字符串。

调用格式:(xdrx_str_join <字符串表> <插入串>)

返回值:字符串

示例:(xdrx_str_join '("1" "2") "/")="1/2"
     (xdrx_str_join '(1 2) "/")="1/2"
     
说明:表中的数据类型可以是字符串,整数,实数,对于实数取整。

//build 10405

修正了函数xdrx_srchdim 不能使用DIM_FONT字体的问题。
修正了函数xdrx_begin和xdrx_end配对使用时候,以前的捕捉不能恢复的问题。
增强了函数xdrx_isinside的功能:增加了,判断点是否在一个多边形顶点表集合内,不需要给定实体。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-7-5 08:35:28 | 显示全部楼层
来源: http://www.acadx.com/
本人作了一点修改

  1. [FONT=courier new]
  2. ;;;==================================================================
  3. ;;; (StrParse Str Delimiter)
  4. ;;;                Parses a delimited string into a list
  5. ;;;------------------------------------------------------------------
  6. ;;; Parameters:
  7. ;;;                Str                        String to parse
  8. ;;;                Delimiter        Delimiter to search for
  9. ;;;------------------------------------------------------------------
  10. ;;;        Returns:
  11. ;;;                A list strings.
  12. ;;;                ex:
  13. ;;;                (setq a "Harp,Guiness,Black and Tan")
  14. ;;;                (StrParse a ",")
  15. ;;;                returns:
  16. ;;;                ("Harp" "Guiness" "Black and Tan")
  17. ;;;------------------------------------------------------------------
  18. ;;; See Also: (StringToList)
  19. ;;;------------------------------------------------------------------
  20. (defun strParse        (Str Delimiter / SearchStr StringLen return n char)
  21.         (setq SearchStr Str)
  22.         (setq StringLen (strlen SearchStr))
  23.         (setq return '())

  24.         (while (> StringLen 0)
  25.                 (setq n 1)
  26.                 (setq char (substr SearchStr 1 1))
  27.                 (while (and (/= char Delimiter) (/= char ""))
  28.                         (setq n (1+ n))
  29.                         (setq char (substr SearchStr n 1))
  30.                 ) ;_ end of while
  31.                 (setq return (cons (substr SearchStr 1 (1- n)) return))
  32.                 (setq SearchStr (substr SearchStr (1+ n) StringLen))
  33.                 (setq StringLen (strlen SearchStr))
  34.         ) ;_ end of while
  35.         (reverse return)
  36. ) ;_ end of defun

  37. ;;;==================================================================
  38. ;;; (StrUnParse Lst Delimiter)
  39. ;;;                Parses a list of strings into 1 delemited string
  40. ;;;------------------------------------------------------------------
  41. ;;; Parameters:
  42. ;;;                Str                        List to concantenate
  43. ;;;                Delimiter        Delimiter to use
  44. ;;;------------------------------------------------------------------
  45. ;;;        Returns:
  46. ;;;                A string.
  47. ;;;                ex:
  48. ;;;                (setq a '("Harp" "Guiness" "Black and Tan"))
  49. ;;;                (StrUnParse a ",")
  50. ;;;                returns:
  51. ;;;                "Harp,Guiness,Black and Tan"
  52. ;;;------------------------------------------------------------------
  53. (defun StrUnParse (Lst Delimiter / return)
  54.         (setq return "")
  55.         (foreach str Lst
  56.                 (setq return (strcat return Delimiter str))
  57.         ) ;_ end of foreach
  58.         (substr return 2)
  59. ) ;_ end of defun
  60. [/FONT]

另外,我给出addsupportpath, RemoveSupportPath的例子。这段
程序用在了晓东工具箱的安装代码中。

  1. [FONT=courier new]
  2. (defun addSupportPath (dir / tmp lst)
  3.   (setq tmp "")
  4.   (if
  5.     (not
  6.       (member (strcase dir)
  7.               (setq lst (mapcar 'strcase (strParse (getenv "ACAD") ";")))
  8.       )
  9.     )
  10.      (progn
  11.        (setq tmp (StrUnParse (append lst (list dir)) ";"))
  12.        (setenv "ACAD" tmp)
  13.      )
  14.   )
  15.   (princ)
  16. )



  17. (defun removeSupportPath (dir / tmp)
  18.   (setq tmp "")
  19.   (mapcar '(lambda (x)
  20.              (if (/= (strcase x) (strcase dir))
  21.                (setq tmp (strcat tmp x ";"))
  22.              )
  23.            )
  24.           (StrParse (getenv "ACAD") ";")
  25.   )
  26.   (setenv "ACAD" (substr tmp 1 (1- (strlen tmp))))
  27.   (princ)
  28. )

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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2002-10-30 16:19:16 | 显示全部楼层
秋枫的自定义函数addSupportPath在R14使用会出错,经查是(setenv "ACAD" tmp)的问题,能修改一下吗? R14的HELP里怎么没有setenv
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-10-31 04:36:38 | 显示全部楼层
或许那是邱枫自己写的函数,没有给你代码。
你把它改成
  1. setvar
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 19:30 , Processed in 0.418102 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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