乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 119|回复: 9

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

[复制链接]

3

主题

22

帖子

3

银币

初来乍到

Rank: 1

铜币
34
发表于 2004-3-4 09:54:00 | 显示全部楼层 |阅读模式
本人是这里的新人,工作中遇到画线段问题。请教各位高手赐教。 如何用LISP语言实现自动读取该文件画不连续线段?
___________
_______
_________表文件如下:文件名比如说是:sj.txt
1208 20
        1218 12
        1228 15
        1298 18
......
回复

使用道具 举报

3

主题

22

帖子

3

银币

初来乍到

Rank: 1

铜币
34
发表于 2004-3-4 14:53:00 | 显示全部楼层
为什么没人帮我?请哪位版主赐教。
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 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)
)
回复

使用道具 举报

3

主题

22

帖子

3

银币

初来乍到

Rank: 1

铜币
34
发表于 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有什么区别吗?
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 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)
)
回复

使用道具 举报

3

主题

22

帖子

3

银币

初来乍到

Rank: 1

铜币
34
发表于 2004-3-11 08:43:00 | 显示全部楼层

meflying:用你上面的程序后,我的问题解决了。再一次表示感谢。
(注:上面的问题是数据类型转换问题。)
回复

使用道具 举报

3

主题

22

帖子

3

银币

初来乍到

Rank: 1

铜币
34
发表于 2004-3-11 14:55:00 | 显示全部楼层
问题是解决了,可程序中这句不知道什么意思,解释一下行吗?
lst
         (mapcar '(lambda (e)
回复

使用道具 举报

3

主题

22

帖子

3

银币

初来乍到

Rank: 1

铜币
34
发表于 2004-3-11 15:50:00 | 显示全部楼层
不用回复,我已经明白了!
回复

使用道具 举报

13

主题

40

帖子

4

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
92
发表于 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左边都没有括号?
刚开始学习,请版主多多指教:)
回复

使用道具 举报

26

主题

3072

帖子

10

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3177
发表于 2004-3-22 16:59:00 | 显示全部楼层
1、不错,你要熟悉mapcar的用法就知道了。
2、这只是写在不同行而已,如(setq a 0)可以写成
(setq
a
0)
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-8-15 13:37 , Processed in 2.702213 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表