明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3368|回复: 13

]求助:读文本数据表画不连续线段问题

  [复制链接]
发表于 2004-3-4 09:54:00 | 显示全部楼层 |阅读模式
本人是这里的新人,工作中遇到画线段问题。请教各位高手赐教。 如何用LISP语言实现自动读取该文件画不连续线段? ___________ _______ _________ 表文件如下:文件名比如说是:sj.txt 1208 20 1218 12 1228 15 1298 18 ......
 楼主| 发表于 2004-3-4 14:53:00 | 显示全部楼层
为什么没人帮我?请哪位版主赐教。
发表于 2004-3-4 20:22:00 | 显示全部楼层
(defun c:test( / filename f y pos line len lst)
(setq filename "e:\\sj.txt")
(setq f (open filename "r"))
(while (setq line (read-line f))
(if (/= line "")
(progn
(setq y (read line))
(setq pos (vl-string-search (rtos y) line))
(setq line (substr line (+ pos (strlen (rtos y)) 1) (- (strlen line) pos (strlen (rtos y)))))
(setq len (read line))
(setq lst (append lst (list (list y len))))
)
)
)
(close f)
lst
(mapcar '(lambda(e) (command "_.line" (list 0 (car e) 0) (polar (list 0 (car e)) 0 (cadr e)) "")) lst)
(princ)
)
 楼主| 发表于 2004-3-10 15:50:00 | 显示全部楼层
非常,非常,非常感谢meflying给予的帮助。(等待帮助的日子真难熬啊,本以为没人理我的贴子,有谁知道自学者的艰辛啊)我爱明经CAD论坛,在这里,我学到了不少书本上难找到的知识。 不过,在日常修改LISP程序中,常遇到参数类型错误。比如上面的sj.txt中的数据如果变化成如下格式,运行meflying给的程序就会出现错误提示: 错误: 输入中的点位置不正确。如何解决命令与参数类型匹配这一问题呢? 1208.00 20.00
1218.00 12.00
1228.00 15.00
1298.00 18.00 在读取数据时用read ,substr时与采用car,cadr有什么区别吗?
发表于 2004-3-10 20:44:00 | 显示全部楼层
“substr时与采用car,cadr有什么区别吗?” 不明白你想问什么,函数不一样,结果肯定是不一样的 (defun c:test (/ filename f line lst)
(setq filename "e:\\sj.txt")
(setq f (open filename "r"))
(while (setq line (read-line f))
(if (/= line "")
(progn
(setq line (read (strcat "(" line ")")))
(setq lst (append lst (list line)))
)
)
)
(close f)
lst
(mapcar '(lambda (e)
(command "_.line"
(list 0 (car e) 0)
(polar (list 0 (car e)) 0 (cadr e))
""
)
)
lst
)
(princ)
)
 楼主| 发表于 2004-3-11 08:43:00 | 显示全部楼层
meflying发表于2004-3-10 20:44:00(defun c:test (/ filename f line lst) (setq filen...

meflying:用你上面的程序后,我的问题解决了。再一次表示感谢。 (注:上面的问题是数据类型转换问题。)
 楼主| 发表于 2004-3-11 14:55:00 | 显示全部楼层
问题是解决了,可程序中这句不知道什么意思,解释一下行吗? lst
(mapcar '(lambda (e)
 楼主| 发表于 2004-3-11 15:50:00 | 显示全部楼层
不用回复,我已经明白了!
发表于 2004-3-22 16:29:00 | 显示全部楼层
这里我还不太明白:
1。监视里面看到,最后lst的返回值是((1208 20.00)(1218 12)(1228 15)(1298 18))
这样的话,距离为什么可以用(cadr e)?e 难道是lst表中的一个子表? 2。为什么 (close f)后面的lst左边都没有括号?
刚开始学习,请版主多多指教:)
发表于 2004-3-22 16:59:00 | 显示全部楼层
1、不错,你要熟悉mapcar的用法就知道了。


2、这只是写在不同行而已,如(setq a 0)可以写成


(setq


a


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

本版积分规则

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

GMT+8, 2025-5-22 03:44 , Processed in 0.205547 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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