怎么提取表中相同两个坐标之间的坐标
各位大侠帮帮忙,我这里有一个表((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)
我应该怎么样做呀,谢谢!!!
最终的结果是什么样的呢?是单个的表,还是分别的表? 还有什么其它的条件么,表原本是没有颜色的。
仅仅求两个子表之间的内容,就顺序读过去,遇到第一个子表开始记录,遇到第二个子表结束记录。 我有个思路,大概是这样
假设表为(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)
ZZXXQQ 发表于 2013-11-21 08:09
最终的结果是什么样的呢?是单个的表,还是分别的表?
分别的三个表,因为我要把坐标提取到text文件内,把这三个表分成三个部分, 本帖最后由 llsheng_73 于 2013-11-26 13:58 编辑
(defun xxxx(lst / a b c s)
(setq a(car lst)lst(cdr lst) s (list a))
(while (/=(vl-princ-to-string(setq b(car lst)))(vl-princ-to-string a))
(setq s(append s(list b))lst(cdr lst)))
(setq s(append s(list(car lst)))
lst(cdr lst)
a(car lst)lst(cdr lst) s1 (list a))
(while (/=(vl-princ-to-string(setq b(car lst)))(vl-princ-to-string a))
(setq s1(append s1(list b))lst(cdr lst)))
(setq s1(append s1(list(car lst)))
lst(cdr lst)
a(car lst)lst(cdr lst) s2 (list a))
(while (/=(vl-princ-to-string(setq b(car lst)))(vl-princ-to-string a))
(setq s2(append s2(list b))lst(cdr lst)))
(setq s2(append s2(list a)))
(list s s1 s2)
)
;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))
不知道能不能满足楼主需求
本帖最后由 nzl1116 于 2013-11-21 19:13 编辑
<BLOCKQUOTE>(defun myfunc (Lst / Lst0 Lst1 var Lst2)
(setq Lst0 nil)
(while (setq Item (car Lst))
(setq Lst1 nil)
(if (setq Lst2 (vl-member-if
'(lambda (x)
(setq var (equal x item))
(if (not var)
(setq Lst1 (cons x Lst1))
)
var
)
(cdr Lst)
)
)
(setq Lst(cdr Lst2)
Lst0 (cons (reverse Lst1) Lst0)
)
(setq Lst (cdr Lst))
)
)
(reverse Lst0)
) nzl1116 发表于 2013-11-21 18:52 static/image/common/back.gif
谢谢了,, llsheng_73 发表于 2013-11-21 18:25 static/image/common/back.gif
不知道能不能满足楼主需求
谢了,我先看看,,
页:
[1]