找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 593|回复: 4

[求助] [求助]:用lisp编程,如何将下例数值取出?5-10-18

[复制链接]
发表于 2003-5-26 00:19:58 | 显示全部楼层 |阅读模式

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

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

×
用lisp编程,如何将下例数值取出?
5-10-18,11-7-3,2-1-9
要求:将相同位置的数值放在同一集合。
如:5,11,2同一集合
     18,3,9同一集合
望各位指点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-5-26 00:37:29 | 显示全部楼层

Re: [求助]:用lisp编程,如何将下例数值取出?5-10-18

最初由 JQKA 发布
[B]用lisp编程,如何将下例数值取出?
5-10-18,11-7-3,2-1-9
要求:将相同位置的数值放在同一集合。
如:5,11,2同一集合
     18,3,9同一集合
望各位指点。 [/B]

  1. ;;;==================================================================
  2. ;;; (strparse str delimiter)
  3. ;;;             将具有分隔符的字符串解析为列表
  4. ;;;------------------------------------------------------------------
  5. ;;; 参数:
  6. ;;;             str                     要解析的字符串
  7. ;;;             delimiter       要搜索的分隔符
  8. ;;;------------------------------------------------------------------
  9. ;;;     返回:
  10. ;;;             一个字符串列表。
  11. ;;;             示例:
  12. ;;;             (setq a "harp,guiness,black and tan")
  13. ;;;             (strparse a ",")
  14. ;;;             返回:
  15. ;;;             ("harp" "guiness" "black and tan")
  16. ;;;------------------------------------------------------------------
  17. ;;; 相关主题: (stringtolist)
  18. ;;;------------------------------------------------------------------
  19. (defun string_parse
  20.                     (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.     )
  31.     (setq return (cons (substr searchstr 1 (1- n)) return))
  32.     (setq searchstr (substr searchstr (1+ n) stringlen))
  33.     (setq stringlen (strlen searchstr))
  34.   )
  35.   (reverse return)
  36. )
  37. (defun test (strlst / strlst1)
  38.   (setq strlst1 (mapcar '(lambda (x) (string_parse x "-")) strlst))
  39.   (list        (mapcar 'car strlst1)
  40.         (mapcar 'cadr strlst1)
  41.         (mapcar 'last strlst1)
  42.   )
  43. )

测试:
_$ (test '("2-4-6" "4-6-7" "8-9-0"))
(("2" "4" "8") ("4" "6" "9") ("6" "7" "0"))

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

使用道具 举报

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

使用道具 举报

发表于 2003-5-26 02:36:21 | 显示全部楼层
凑凑热闹:),功能一样:
;;转换 ("2-4-6" "4-6-7" "8-9-0") -> ((2 4 8)(4 6 9)(6 7 0))

  1. (defun test (lst / lst2 lst3)
  2. (setq lst2 (mapcar '(lambda (x) (read (strcat "(" (vl-string-translate "-" " " x) ")")) ) lst)
  3.       lst3 (list (mapcar 'car lst2) (mapcar 'cadr lst2) (mapcar 'last lst2))
  4. ))

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2003-5-26 12:50:41 | 显示全部楼层
最初由 梦断江南 发布
[B]凑凑热闹:),功能一样:
;;转换 ("2-4-6" "4-6-7" "8-9-0") -> ((2 4 8)(4 6 9)(6 7 0))

  1. (defun test (lst / lst2 lst3)
  2. (setq lst2 (mapcar '(lambda (x) (read (strcat "(" (vl-string-translate "-" " "...
[/B]

受江南启发,自己写了个字串拆分

  1. ;;;==================================================================
  2. ;;; (ea:string_parse str delimiter)
  3. ;;;             将具有分隔符的字符串解析为列表
  4. ;;;------------------------------------------------------------------
  5. ;;; 参数:
  6. ;;;             str                     要解析的字符串
  7. ;;;             delimiter               要搜索的分隔符
  8. ;;;------------------------------------------------------------------
  9. ;;;     返回:
  10. ;;;             一个字符串列表。
  11. ;;;             示例:
  12. ;;;             (setq a "harp,guiness,black and tan")
  13. ;;;             (ea:string_parse a ",")
  14. ;;;             返回:
  15. ;;;             ("harp" "guiness" "black and tan")
  16. ;;;------------------------------------------------------------------
  17. (defun ea:string_parse (str delimiter / post strlst)
  18.   (setq strlst '())
  19.   (while (vl-string-search delimiter str)
  20.     (setq post (vl-string-search delimiter str))
  21.     (setq strlst (append strlst (list (substr str 1 post))))
  22.     (setq str (substr str (+ post 2)))
  23.   )
  24.   (vl-remove  "" (append strlst (list str)))
  25. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-26 09:52 , Processed in 0.171106 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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