明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2277|回复: 5

选取大量的文字进行处理,但是速度很慢,为什么?据说标题要长

[复制链接]
发表于 2012-6-30 23:07:48 | 显示全部楼层 |阅读模式
选取一些文字进行处理,由于有时候选取的文字比较多,运行时发现比较慢,研究代码后发现主要是repeat后面那个循环很慢,
代码如下:   (setq ss (ssget '((0 . "*TEXT")))
    i 0
    lsstr nil
    ent_lst nil
   )

   (repeat (sslength ss)
      (progn
           (setq ent_lst (cons  (ssname ss i) ent_lst)
                 i (1+ i)
           )
      )
   )

(prompt "\n 正在处理数据.......").......

调试的时候repeat的循环执行不算慢,但是在cad底下运行,感觉很慢,400个左右的文字,差不多要2、3min才循环完,然后打印出 " 正在处理数据......."是代码原因还是本身autolisp语言执行效率就低?
欢迎大家探讨


发表于 2012-7-1 07:10:51 来自手机 | 显示全部楼层
把完整的代码贴上来供分析!400个文字要处理两三分钟时间?不可思议!
发表于 2012-7-1 14:38:55 | 显示全部楼层
应该不可能,可能是你其它代码有问题.
 楼主| 发表于 2012-7-1 16:44:29 | 显示全部楼层
本帖最后由 fwdll 于 2012-7-2 14:55 编辑

后面的代码会影响前面代码的执行吗?后面代码很长,我想如果会影响,只有这段排序的代码了。
(while (> (length ent_lst) 0)
          (setq ent_lst (vl-sort ent_lst '(lambda(e1 e2 ) (< (distance (cdr (assoc 10 (entget (car ent_lst )))) (cdr(assoc 10 (entget   e1 ))))
                        (distance (cdr(assoc 10 (entget (car ent_lst ))))(cdr (assoc 10 (entget   e2))))))));按距离大小排序
          (repeat numstr;;numstr是前面输入的一个整数,以下语句是取彼此距离最相近的numstr个文字。
             (setq lstxtgrp (append lstxtgrp ( list(car ent_lst)))
                   ent_lst (vl-remove  (car ent_lst) ent_lst)
             )
          )
          (setq lstottxt(append  lstottxt(list lstxtgrp) )
                 lstxtgrp nil)     
       )

点评

犹抱琵琶半遮面。  发表于 2012-7-1 17:43
 楼主| 发表于 2012-7-2 14:57:18 | 显示全部楼层
没人回答吗?我这个程序主要是选取一大堆文字中,彼此之间最近的某几个文字,有没有更好的算法呢?
发表于 2012-7-2 16:47:59 | 显示全部楼层
...更好的算法呢?

您不妨花些时间搜寻排序的算法?
更好的算法? 有其相应的静态资料与之对应
背后隐含了许许多多的相关资讯
确认后再去择优何种排序法 ...

Z 版的意思是就您已提供的资料尚难定夺...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-21 21:58 , Processed in 0.198569 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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