明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1003|回复: 8

[已解答] 怎么提取表中相同两个坐标之间的坐标

[复制链接]
发表于 2013-11-21 08:03 | 显示全部楼层 |阅读模式
各位大侠帮帮忙,我这里有一个表((500039.0 299990.0) (500056.0 299987.0) (500053.0 299975.0) (500044.0 299968.0) (500039.0 299990.0) (500056.0 299987.0) (500070.0 299991.0)
(500070.0 299983.0) (500053.0 299975.0) (500056.0 299987.0) (500070.0 299991.0)
(500084.0 299991.0) (500084.0 299968.0) (500069.0 299968.0) (500070.0 299983.0)
(500070.0 299991.0))

我想把其中红色的两个坐标和中间的坐标提成一个表,黄色的提成一个表,绿色的提成一个表,红色的 (500039.0 299990.0) (500056.0 299987.0) (500053.0 299975.0) (500044.0 299968.0) (500039.0 299990.0)   。
黄色的(500056.0 299987.0) (500070.0 299991.0) (500070.0 299983.0) (500053.0 299975.0) (500056.0 299987.0)
绿色的(500070.0 299991.0) (500084.0 299991.0) (500084.0 299968.0) (500069.0 299968.0) (500070.0 299983.0) (500070.0 299991.0)

我应该怎么样做呀,谢谢!!!
发表于 2013-11-21 08:09 | 显示全部楼层
最终的结果是什么样的呢?是单个的表,还是分别的表?
发表于 2013-11-21 08:12 | 显示全部楼层
还有什么其它的条件么,表原本是没有颜色的。
仅仅求两个子表之间的内容,就顺序读过去,遇到第一个子表开始记录,遇到第二个子表结束记录。
发表于 2013-11-21 08:46 | 显示全部楼层
我有个思路,大概是这样
假设表为(x y 1 2 3 y z)
用member,提取得到 y 以后的表即 (y 1 2 3 y z)
用cdr 去掉第一个 y 得到 (1 2 3 y z)
用reverse 倒置上表得到 (z y 3 2 1)
再用member,提取得到 y 以后的表即 (y 3 2 1)
用cdr去掉第一个 y 以后得到新表(3 2 1)
最后用reverse倒置该表得到最终表(1 2 3)
 楼主| 发表于 2013-11-21 08:49 来自手机 | 显示全部楼层
ZZXXQQ 发表于 2013-11-21 08:09
最终的结果是什么样的呢?是单个的表,还是分别的表?

分别的三个表,因为我要把坐标提取到text文件内,把这三个表分成三个部分,

点评

你要贴出你要的结果,别人才知道怎么帮你  发表于 2013-11-21 11:33
发表于 2013-11-21 18:25 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-11-26 13:58 编辑

  1. (defun xxxx(lst / a b c s)
  2.   (setq a(car lst)lst(cdr lst) s (list a))
  3.   (while (/=(vl-princ-to-string(setq b(car lst)))(vl-princ-to-string a))
  4.     (setq s(append s(list b))lst(cdr lst)))
  5.   (setq s(append s(list(car lst)))
  6.   lst(cdr lst)
  7.   a(car lst)lst(cdr lst) s1 (list a))
  8.   (while (/=(vl-princ-to-string(setq b(car lst)))(vl-princ-to-string a))
  9.     (setq s1(append s1(list b))lst(cdr lst)))
  10.   (setq s1(append s1(list(car lst)))
  11.   lst(cdr lst)
  12.   a(car lst)lst(cdr lst) s2 (list a))
  13.   (while (/=(vl-princ-to-string(setq b(car lst)))(vl-princ-to-string a))
  14.     (setq s2(append s2(list b))lst(cdr lst)))
  15.   (setq s2(append s2(list a)))
  16.   (list s s1 s2)
  17.   )

;xxxx可以任意改为你喜欢的,表被分成三段返回为一个表(list s s1 s2) s((500039.0 299990.0)...(500039.0 299990.0))s1((500056.0 299987.0)...(500056.0 299987.0))s2((500070.0 299991.0) ...(500070.0 299991.0))
不知道能不能满足楼主需求

本帖子中包含更多资源

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

x
发表于 2013-11-21 18:52 | 显示全部楼层
本帖最后由 nzl1116 于 2013-11-21 19:13 编辑
  1. [code=lisp]
  2. <BLOCKQUOTE>(defun myfunc (Lst / Lst0 Lst1 var Lst2)
  3.   (setq Lst0 nil)
  4.   (while (setq Item (car Lst))
  5.     (setq Lst1 nil)
  6.     (if (setq Lst2 (vl-member-if
  7.        '(lambda (x)
  8.    (setq var (equal x item))
  9.    (if (not var)
  10.      (setq Lst1 (cons x Lst1))
  11.    )
  12.    var
  13.         )
  14.        (cdr Lst)
  15.      )
  16. )
  17.       (setq Lst  (cdr Lst2)
  18.      Lst0 (cons (reverse Lst1) Lst0)
  19.       )
  20.       (setq Lst (cdr Lst))
  21.     )
  22.   )
  23.   (reverse Lst0)
  24. )
 楼主| 发表于 2013-11-26 07:40 | 显示全部楼层
nzl1116 发表于 2013-11-21 18:52

谢谢了,,
 楼主| 发表于 2013-11-26 13:13 | 显示全部楼层
llsheng_73 发表于 2013-11-21 18:25
不知道能不能满足楼主需求

谢了,我先看看,,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-20 00:11 , Processed in 0.222603 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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