明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1450|回复: 5

[提问] 求个表分组处理函数

[复制链接]
发表于 2014-11-23 12:31:47 | 显示全部楼层 |阅读模式
求个表分组处理函数
如(setq l '(1 2  ","  3 (4 5  ","  6 7 (8 9 "," 10 11  ","  12)) 13 14  ","  15 16))
表中数据按分隔符 "," 分组?
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2014-11-23 18:34:08 | 显示全部楼层
77077 发表于 2014-11-23 17:55
受益匪浅,不过可能是我表述不清,我实际想要的是不改变多层表的层数。

你这是在浪费别人的时间,提问要想尽快得到快速准确的回复,必须做到:
1、尽可能详细的描述你提出你的问题,最好配合具体的实例,给出示意图或DWG例图
2、详细描述你想要得到的结果,尽可能给出最终的结果,而且是不要有歧义的结果!

这样能节省回复者的时间,而且你会尽快的到准确的回复,而不是别人给你回复了,却不是你想要的结果!
另外,请认真学习下置顶的帖子  【提示公告】本版关于提问的一些注意事项
回复 支持 1 反对 0

使用道具 举报

发表于 2014-11-23 13:25:26 来自手机 | 显示全部楼层
先princ为string再替换 ,  为 )( 替换

点评

貌似简单,不过能解决问题!  发表于 2014-11-23 17:56
发表于 2014-11-23 14:36:09 | 显示全部楼层
1、表直接处理,递归法(不是太熟练)
  1. ;(setq l1 '(1 2  ","  3 (4 5  ","  6 7 (8 9 "," 10 11  ","  12)) 13 14  ","  15 16))
  2. ;(T11 L1 NIL NIL)
  3. ;=>((16 15) (14 13 12) (11 10) (9 8 7 6) (5 4 3) (2 1))
  4. (defun t11 (l1 l2 l3)
  5.     (mapcar
  6.         '(lambda(x)
  7.             (if (= 'list (type x))
  8.                 (setq l2 (t11 x l2 l3) l3 (cdr l2) l2 (car l2))
  9.                 (if (= "," x)
  10.                     (setq l2 (cons l3 l2) l3 nil)
  11.                     (setq l3 (cons x l3))
  12.                 )
  13.             )
  14.         )
  15.          l1
  16.     )
  17.     (cons l3 l2)
  18. )
2、间接处理法,通过字符处理为单括号。
  1. ;(setq l1 '(1 2  ","  3 (4 5  ","  6 7 (8 9 "," 10 11  ","  12)) 13 14  ","  15 16))
  2. ;(T12 L1)
  3. ;=>((16 15) (14 13 12) (11 10) (9 8 7 6) (5 4 3) (2 1))
  4. (defun t12 (l1 / l2 l3)
  5.     (mapcar
  6.         '(lambda(x)
  7.             (if (= "," (vl-princ-to-string x))
  8.                 (setq l2 (cons l3 l2) l3 nil)
  9.                 (setq l3 (cons x l3))
  10.             )
  11.         )
  12.         (read
  13.             (strcat "("
  14.                 (vl-string-translate "()" "  "
  15.                     (vl-princ-to-string l1)
  16.                 )
  17.                 ")"
  18.             )
  19.         )
  20.     )
  21.     (cons l3 l2)
  22. )
结果再处理
  1. ;结果再处理
  2. ;((1 2) (3 4 5) (6 7 8 9) (10 11) (12 13 14) (15 16))
  3. (reverse(mapcar 'reverse (T12 L1)))
复制代码
 楼主| 发表于 2014-11-23 17:55:32 | 显示全部楼层
wowan3344 发表于 2014-11-23 14:36
1、表直接处理,递归法(不是太熟练)2、间接处理法,通过字符处理为单括号。结果再处理

受益匪浅,不过可能是我表述不清,我实际想要的是不改变多层表的层数。
发表于 2014-11-25 18:35:03 | 显示全部楼层
77077 发表于 2014-11-23 17:55
受益匪浅,不过可能是我表述不清,我实际想要的是不改变多层表的层数。

不改变多层表的层数
分出来是个什么样??
给个结果呗...很新鲜的表...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-23 17:54 , Processed in 0.185920 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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