找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: liuzqyh

[求助] [求助]:关于数组

[复制链接]

已领礼包: 6530个

财富等级: 富甲天下

发表于 2003-2-17 12:43:39 | 显示全部楼层
常规输出的几种方法,供参考。

  1. (setq al '(1 2 3 4)
  2.       bl '(5 6 7 8)
  3. )
  4. ;方法一
  5. (foreach n al (princ n))
  6. ;方法二
  7. (setq cl al)              ;常规方法
  8. (while cl
  9.   (princ (car cl))
  10.   (setq cl (cdr cl))
  11. )
  12. ;方法三
  13. (setq i 0)
  14. (repeat (length al)
  15.   (princ (nth i al))
  16.   (setq i (1+ i))
  17. )
  18. ;方法四
  19. (mapcar '(lambda(x y)      ;高级方法,对大量循环方便,是处理“数组”的好方法
  20.            (princ x)
  21.            (princ y)
  22.          )
  23.         al
  24.         bl
  25. )

  26. ;输出到文件的方法
  27. (setq fn (getfiled "文本文件" "CADText" "txt" 13))
  28. (setq fs (open fn "a"))
  29. (mapcar '(lambda(x y)
  30.            (princ (rtos x) fs)
  31.            (princ "\t" fs)          ;Lisp中不认“,”分隔,这里用制表符分隔
  32.            (princ (rtos y) fs)
  33.            (princ "\n" fs)          ;换行
  34.          )
  35.         al
  36.         bl
  37. )
  38. (close fs)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-2-17 16:51:36 | 显示全部楼层
上次你帮我修改的程序我有几处不明白:
1. (command "_.style" "xiao" "romans,hztxt" "" "0.7" "" "" "")(command) ;有些字体不可竖排  为什么最后还要一次(command);
2. 程序中有几处设有 (t nil),有何用意?
3. (action_tile "1" "(setq cs \"1\")")  和 ( action_tile "1" "(setq cs 1)" ) 有何区别?
4. 为了美观,我们经常会将数值置于中间,请问如何将不同长度的数字串置中?如空格长度为35,数值:159.36;1.36;12589.84651;0.234!!
看你对Lisp的了解,你学了多少年?自学?说实话,我真的很佩服你!Good Luck!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-2-17 17:30:02 | 显示全部楼层
一个空的(command)相当于两个ctrl+c
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-2-17 23:11:40 | 显示全部楼层
最初由 zhynt 发布
[B]一个空的(command)相当于两个ctrl+c [/B]

是不是重复执行上个命令两次?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2003-2-18 12:37:11 | 显示全部楼层
最初由 liuzqyh 发布
上次你帮我修改的程序我有几处不明白:
1. (command "_.style" "xiao" "romans,hztxt" "" "0.7" "" "" "")(command) ;有些字体不可竖排  为什么最后还要一次(command);
2. 程序中有几处设有 (t nil),有何用意?
...

1.不带参数调用 command 相当于敲 ESC 键,这样可取消大多数 AutoCAD 命令。大字体文件的定义各不相同,有些支持竖排,有些不支持,同样是Hztxt.shx,有些也不支持竖排,这样在执行语句“(command "style" ...)”时,最后就会相差一个回车,程序运行到这里时,如果shx文件不匹配就会出错,解决的方法就是用空的command在最后一个回车时取消。
2.“(t nil)“一般在测试函数cond尾部使用,其意义是“当测试条件成立但不满足以上所有条件时执行nil(不执行)”,目的是防止测试时出现意外错误,其中的nil还可以是其它的函数,用来执行缺省的操作。
3.(action_tile "1" "(setq cs \"1\")") 返回的结果是字符串1,(action_tile "1" "(setq cs 1)") 返回的结果是数值1。其中的“\"”代表引用一个字符“"”,避免与前面的引号成对。
4.这个问题不太理解,是问在图形中输出的文本对齐情况吗?就如你程序中“x=3.453,y=115.342”怎么对齐是吗?我对类似的问题的解决方法是:用textbox函数分别求出两个字符串长度,然后取大值画线,如果需要中心对齐,可计算出中心对齐点,然后在此点插入文字(中心对齐)。

我学习Lisp的时间已经有十年了,时间长了,也就了解了。一直在设计单位画图,边画边学,学以致用。

帖一个以前编的程序(后来简单修改过),其中idd是标注坐标,给你参考参考。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-2-18 12:51:16 | 显示全部楼层
最初由 ll_j 发布
[B][QUOTE]最初由 liuzqyh 发布
上次你帮我修改的程序我有几处不明白:
1. (command "_.style" "xiao" "romans,hztxt" "" "0.7" "" "" "")(command) ;有些字体不可竖排  为什么最后还要一次(command);
2. 程... [/B]

谢谢你的指点,我第4点的意思如下:
    1     2.36    156.62
    10   125.6     2.35
120  1586.6     1.1
中心(或左、右)对称,如何编?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2003-2-18 13:06:06 | 显示全部楼层
最初由 liuzqyh 发布
谢谢你的指点,我第4点的意思如下:
1 2.36 156.62
10 125.6 2.35
120 1586.6 1.1
中心(或左、右)对称,如何编?


在图形中用前面所说的方法可以排,就是将数值分别取出,然后转换成字符串,再按一定行、列间距求插入点,输出。
在文本文件中无法按中心或右对齐,只能输入字符"\t"(制表符)分隔,这样会整齐点。如果一定要右对齐,只能分别计算字符长度,然后不足部分用空格填上。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-2-18 13:43:25 | 显示全部楼层
函数 textbox 返回文字对象矩形边框的对角点坐标,而不是字符串长度,函数有误?你在家上网?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2003-2-18 14:52:31 | 显示全部楼层
最初由 liuzqyh 发布
函数 textbox 返回文字对象矩形边框的对角点坐标,而不是字符串长度,函数有误?你在家上网?


确实是textbox,这里的长度指文本在图形中占用的实际位置(△x),不是字符串中字符个数。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-2-18 15:26:11 | 显示全部楼层
最初由 ll_j 发布
[B][QUOTE]最初由 liuzqyh 发布
[QUOTE]最初由 zhynt 发布
[B]好像用不着什么数组吧
(setq b T)
(while (= b T)
(setq a (getpoint "\n请在屏幕上取点"))
(if (= a nil) (setq b nil)
(progn
(se... [/B]


能否将c表写到一个文件中
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2003-2-18 17:32:42 | 显示全部楼层
最初由 ch3028 发布
能否将c表写到一个文件中


第16帖中有输出到文本文件的方法。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-2-18 20:17:19 | 显示全部楼层
最初由 ll_j 发布
[B]

确实是textbox,这里的长度指文本在图形中占用的实际位置(△x),不是?.. [/B]

我写了句程序,请你看看:
其中sxz1是数值表;
(setq zz (textbox (list (nth number  szx1))))
但执行后出现错误: DXF 组不正确:错在哪?如何用textbox求实际位置(△x),怎能样编?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2003-2-18 21:14:11 | 显示全部楼层
最初由 liuzqyh 发布

我写了句程序,请你看看:
其中sxz1是数值表;
(setq zz (textbox (list (nth num...


可能是你的“(nth number szx1)”取出的只是字符串,而在这里应该是个包含组码的表,如“(1 . "abc")”,你可以使用语句
(setq zz (textbox (list (cons 1 (nth number szx1)))))
试试。
单单这样只能计算出当前默认状态的文字边框,在list表中还可以增加其它文字属性,如宽度、高度等,如:
(setq zz (textbox (list (cons 1 (nth number szx1)) '(40 . 3))))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-2-18 23:38:17 | 显示全部楼层
最初由 liuzqyh 发布
[B]函数 textbox 返回文字对象矩形边框的对角点坐标,而不是字符串长度,函数有误?你在家上网? [/B]



(textbox elist)

测量一个指定文本对象的尺寸,并返回围住该文本的一个矩形框的对角坐标

参数

elist

图元定义数据表,定义文字对象,其格式与 entget 函数返回的表的格式相同。
如果在 elist 表中定义文本参数(而不是文本本身)的域被省略,则使用当前值或缺省值。
textbox 函数可以接受的最小的表是文本本身。

返回值

如果成功则返回一个包括两个点的表;否则返回 nil。
textbox 函数返回的点描述了文本对象的边框,假定该文本对象的插入点是 (0,0,0),而旋转角度是 0。通常,除非该文本对象是倾斜的、或者是垂直书写的、或者它包含的字符串中有下行字符(如 g 和 p),否则函数返回的第一个子表是点 (0.0 0.0 0.0)。第一个点表的值指定从文本的插入点到围住该文本的最小矩形的左下角的偏移量。第二个点表的值指定该矩形框的右上角。无论被测量文本的方向怎样,返回的两个点表总是描述围住文本的矩形框的左下角和右上角。

样例

下面的命令提供文字,并使用其他参数的当前缺省设置:

命令:(textbox '((1 . "Hello world.")))

((0.000124126 -0.00823364 0.0) (3.03623 0.310345 0.0))

希望以下代码对你有所帮助

  1.   [FONT=courier new]

  2. ;求文字覆盖范围的四个角点,pt1-左下,pt2-右下,pt3-左上,pt4-右上

  3. (defun textconer (tent / pt1 pt2 pt3 pt4 pt0 tang dis14 pang)
  4.   (setq        pt0   (cdr (assoc 10 tent))   ;求文字左下交点
  5.         tang  (cdr (assoc 50 tent))   ;求文字旋转角度
  6.         pt1   (car (textbox tent))    ;由textbox函数返回的文字边框左下点
  7.         pt4   (cadr (textbox tent))   ;由textbox函数返回的文字边框右上点
  8.         dis14 (distance pt1 pt4)
  9.         pang  (angle pt1 pt4)         ;由textbox函数返回的文字边框左下点与右上点夹角
  10.         pt2   (polar pt1 tang (abs (* dis14 (cos pang))))  ;计算各点相对于pt0的相对坐标
  11.         pt3   (polar pt1 (+ tang (/ pi 2)) (abs (* dis14 (sin pang))))
  12.         pt4   (polar pt1 (+ tang pang) dis14)
  13.   )

  14.   (setq        pt1 (list (+ (car pt0) (car pt1)) (+ (cadr pt0) (cadr pt1)))   ;计算各点的绝对坐标(世界坐标)
  15.         pt2 (list (+ (car pt0) (car pt2)) (+ (cadr pt0) (cadr pt2)))
  16.         pt3 (list (+ (car pt0) (car pt3)) (+ (cadr pt0) (cadr pt3)))
  17.         pt4 (list (+ (car pt0) (car pt4)) (+ (cadr pt0) (cadr pt4)))
  18.   )
  19.   (list pt1 pt2 pt3 pt4)
  20. )

  21. [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-2-19 00:57:20 | 显示全部楼层
谢谢楼上两位的指点,问题得以解决!另请问,我写这个语句时(command "text" put2 4 0 (rtos (nth number szy1) 2 3)),当文字为“-1.230”时,常出现为“-1.23”,为什么会省略一个“0”?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-4-28 04:45 , Processed in 0.196754 second(s), 53 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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