明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2647|回复: 10

高手为什么这个文字合并后是:0.00000哪错了?

[复制链接]
发表于 2009-11-5 12:46:00 | 显示全部楼层 |阅读模式

最近在学习LISP,看别人写的一个文字合并的程序.

我在CAD上试运行了一下,结果居然是:0.000000不是合并后的文字.

我看了半天,不知道哪错了,有高手能指点指点吗?

;文字合并程序
; this program is make letter together
(defun c:wzhb()
  (command "osnap" "off")
  (setq kg1 (getint"\n合并字符间空格数0~10<0>:"))
  (if (= kg1 nil)(setq kg11 ""))
  (if (= kg1 0)(setq kg11 ""))
  (if (= kg1 1)(setq kg11 " "))
  (if (= kg1 2)(setq kg11 "  "))
  (if (= kg1 3)(setq kg11 "   "))
  (if (= kg1 4)(setq kg11 "    "))
  (if (= kg1 5)(setq kg11 "     "))
  (if (= kg1 6)(setq kg11 "      "))
  (if (= kg1 7)(setq kg11 "       "))
  (if (= kg1 8)(setq kg11 "        "))
  (if (= kg1 9)(setq kg11 "         "))   
  (if (= kg1 10)(setq kg11 "          "))
  (setq zzz "")
  (princ "\n选择字符串:")
  (setq s (ssget))
  (setq n (sslength s))
  (setq k 0 )(setq cgm 0)
  (setq fxx nil)
  (setq fyy nil)
  (setq fzz nil)
  (setq pxx1 nil)
  (setq pyy1 nil)

  (while (< k n)
      (setq name (ssname s k))
      (setq a (entget name))
      (setq bhz (assoc '0 a))
      (setq bhz (cdr bhz))
      (if (= bhz "TEXT") (progn
        (if (= k 0) (progn
            (setq b (assoc '0 a))
            (setq b (cdr b))
            (setq h0 (assoc '40 a))
            (setq h0 (cdr h0))
            (setq ag1 (assoc '50 a))
            (setq ag1 (cdr ag1))
     (setq ag1 (* ag1 180) ag1 (/ ag1 pi))
            ))
        (setq nam1 (assoc '-1 a))
        (setq nam1 (cdr nam1))
        (setq xxx (assoc '10 a))
        (setq xy (cdr xxx))
        (setq xx (car xy) yy (cdr xy) yy (car yy))
        (setq tx1 (assoc '1 a))
        (setq tx1 (cdr tx1))
       

        (setq lxx (list xx tx1))
        (setq lyy (list yy tx1))
        (setq lxx (list lxx))
        (setq lyy (list lyy))
        (setq fxx (append fxx lxx))
        (setq fyy (append fyy lyy))
        (setq pxx (list xx) pyy (list yy))
        (setq pxx1 (append pxx1 pxx) pyy1 (append pyy1 pyy))
        (entdel nam1)
        (setq cgm (+ cgm 1))
     ))
     (setq k (+ k 1))
  )

    (setq pxx1 (vl-sort pxx1 '<))
    (setq pyy1 (vl-sort pyy1 '<))
    (setq px (car pxx1) py (car pyy1))
    (setq p1 (list px py))
    (if (= ag1 0.0)(progn
        (setq fzz (vl-sort fxx
                  (function (lambda (e1 e2)
                            (< (car e1) (car e2))))))
 ))
    (if (> ag1 0)(progn
        (setq fzz (vl-sort fyy
                  (function (lambda (e1 e2)
                            (< (car e1) (car e2))))))
 ))

     
        (setq nn 0)
        (while (< nn cgm)
      (setq zz1 (car fzz))
      (setq zz1 (cdr zz1) zz1 (car zz1))
      (setq zzz (strcat zzz kg11 zz1))
      (setq fzz (cdr fzz))
      (setq nn (+ nn 1))
        )

  (command "text" p1 h0 ag1 zzz)
  (command "osnap" "int,mid,nea,cen,per,tan")
)

发表于 2009-11-5 22:25:00 | 显示全部楼层
该程序可以合并字符串,但是程序写得比较繁琐,而且最前面也会出现空格的。
发表于 2009-11-6 10:46:00 | 显示全部楼层

是很繁琐,再说去掉空格的目的是什么?

直接用strcat把文字合并不就完了吗?如果再想去掉空格,在最后的字符串里检测空格去掉即可。

 楼主| 发表于 2009-11-6 11:28:00 | 显示全部楼层
但是我在2006下运行了一下,合并的结果是:0.00000000不是字符窜了.
发表于 2009-11-6 20:22:00 | 显示全部楼层
查一下变量fzz的内容,看是否取字串出错了。
 楼主| 发表于 2009-11-7 00:24:00 | 显示全部楼层

楼主,自学那个累啊,有个问题,没有人知道呀,都得靠自己琢磨,

唉,那真是艰辛哟.

发表于 2009-11-7 10:00:00 | 显示全部楼层
;简化了一下。写出零的主要原因可能是当前字型给出了固定高度。
另:fyy的内容在程序中没有使用,是否可以删掉?
游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0
发表于 2009-11-7 16:13:00 | 显示全部楼层
文编大全之文本合并:

本帖子中包含更多资源

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

x
发表于 2009-11-9 14:58:00 | 显示全部楼层
 楼主| 发表于 2009-11-9 19:39:00 | 显示全部楼层
本帖最后由 作者 于 2009-11-9 23:43:06 编辑

不是我写的,是晓东那边的高手写的.

不过我运行了一下发现不行,呵呵.

 我新手刚来学,还没有买书,就在网上下了一本书,一个吴大师写的.

打算到卓越网上买本来看吧,

版主改的我运行了一下,还是不行呢.

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

本版积分规则

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

GMT+8, 2025-9-25 03:09 , Processed in 0.173869 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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