明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1707|回复: 12

[提问] 向文件写数据的函数

[复制链接]
发表于 2015-9-14 10:50:10 | 显示全部楼层 |阅读模式
问题描述:我想获取屏幕上200个定点的坐标,并存入特定的文件,小弟写了下面的函数,但是运行的结果是只写入一行数据?还望大神们指正。小弟在此先拜谢了,祝各位大神早安~~~
函数如下
(setq i 1)(while (<= i 200)
    (setq p (getpoint))
   (setq X (car p))
   (setq Y (cadr p))
   (setq WJ (open "e:\lx2.txt" "w"))
   (princ X WJ) (princ "," WJ) (princ Y WJ) (princ "\n" WJ)
   (setq i (+ 1 i))
)


发表于 2015-9-14 11:26:32 | 显示全部楼层
请将open 移出while循环
发表于 2015-9-14 11:33:14 | 显示全部楼层
1、可以先打开文件,就如2楼所说。
2、如果open在循环中,可以使用“a”打开,而不是使用“w”。
3、文件打开的位置不同,最后关闭的语句位置也不同,需要注意。
 楼主| 发表于 2015-9-14 11:50:28 | 显示全部楼层
谢谢各位大神指教,小弟经过多次试验 发现
(setq i 1)
(while (<= i 3)
  (setq p (getpoint))
  (setq X (car p))
  (setq Y (cadr p))
  (setq WJ (open "e:\lxa2.txt" "a"))
  (princ X WJ) (princ "," WJ) (princ Y WJ) (princ "\n" WJ)
  (setq i (+ 1 i))
)   这个程序 不可行


(setq i 1)
(while (<= i 3)
  (setq p (getpoint))
  (setq X (car p))
  (setq Y (cadr p))
  (setq WJ (open "e:\lxa3.txt" "a"))
  (princ X WJ) (princ "," WJ) (princ Y WJ) (princ "\n" WJ)
  (close WJ)
  (setq i (+ 1 i))
)  这个程序可行

(setq i 1)
(while (<= i 3)
  (setq p (getpoint))
  (setq X (car p))
  (setq Y (cadr p))
  (setq WJ (open "e:\lxa4.txt" "a"))
  (princ X WJ) (princ "," WJ) (princ Y WJ) (princ "\n" WJ)
    (setq i (+ 1 i))
)
(close WJ) 这个程序不可行
 楼主| 发表于 2015-9-14 11:51:35 | 显示全部楼层
二楼和三楼的方法,小弟下午再试,吃中午饭去了,各位大神也早点吃饭
发表于 2015-9-14 12:25:13 | 显示全部楼层
我爱你王子呀 发表于 2015-9-14 11:50
谢谢各位大神指教,小弟经过多次试验 发现
(setq i 1)
(while (

第一段代码的错误是没有关闭文件,第三段代码的错误是文件打开和关闭不匹配,在循环中打开文件后,第二次打开前没有关闭,所以无法打开。
第二段代码把关闭语句放在循环中,每次打开并操作后都关闭,所以问题解决,但这种方法不断的重复打开、关闭、效率不高,所以正确的方法是在循环开始前打开,循环结束后关闭。

评分

参与人数 1明经币 +1 收起 理由
zctao1966 + 1 赞一个!

查看全部评分

 楼主| 发表于 2015-9-14 14:56:18 | 显示全部楼层
ll_j 发表于 2015-9-14 12:25
第一段代码的错误是没有关闭文件,第三段代码的错误是文件打开和关闭不匹配,在循环中打开文件后,第二次 ...

谢谢大神指教
 楼主| 发表于 2015-9-14 15:02:40 | 显示全部楼层
ll_j 发表于 2015-9-14 12:25
第一段代码的错误是没有关闭文件,第三段代码的错误是文件打开和关闭不匹配,在循环中打开文件后,第二次 ...

刚试了一下,成功,再次拜谢大神,小弟不胜感激!!!!!!
发表于 2015-9-15 08:23:36 | 显示全部楼层
这是我以前写的,你参考一下,注意:提取的坐标格式是 测量坐标系,格式如下
1,,443355.7270,3223379.6554,0.0000
2,,443430.5589,3223417.7149,0.0000
3,,443430.5589,3223417.7149,0.0000
4,,443512.4506,3223417.7149,0.0000
5,,443551.9844,3223450.1360,0.0000
6,,443621.1687,3223438.8591,0.0000
7,,443650.8192,3223426.1726,0.0000
8,,443646.5834,3223365.5592,0.0000
9,,443657.8788,3223340.1862,0.0000
10,,443649.4072,3223309.1747,0.0000
  1. ;命令:plzbsc  (2010-05-17 )  
  2. (defun c:plzbsc()
  3.           (princ "\n选择所需输出的点(point):")
  4.           (setq ss (ssget ));;选取坐标点
  5.           (setq n (sslength ss ));计算坐标点数量
  6.         (setq ff (open (getfiled "坐标文件保存为" "d:/" "dat" 1) "w"));保存路径
  7.           (setq i 0)
  8.           (repeat n
  9.                 (setq spt (ssname ss i ))
  10.                   (setq ept (entget spt))
  11.                   (if (= (cdr (assoc 0 ept)) "POINT")
  12.                           (progn
  13.                                            (setq lxyz (cdr (assoc 10  ept)))
  14.                                           (setq sx (rtos (nth 1 lxyz)));将坐标值实数转换成字符
  15.                                           (setq sy (rtos (nth 0 lxyz)))
  16.                                           (setq sz (rtos (nth 2 lxyz)))
  17.                                         (setq i1 (+ i 1));计算点序号
  18.                                         (setq sn (rtos i1 2 0));将序号实数转换成字符
  19.                                           (setq sxyz (strcat sn",,"  sy ","  sx  ","  sz))
  20.                                           (write-line sxyz ff)
  21.                                 )
  22.                   )
  23.                   (setq i (+ i 1))
  24.           );repeat
  25. )
  26. (prompt "* << 命令:plzbsc >> *输出格式(点号,, Y,X,Z)**")
  27. (prin1)
发表于 2015-9-15 09:21:45 | 显示全部楼层
  1. (defun c:tt ()
  2.   (setq WJ (open "e:\\lx2.txt" "w"))
  3.   (while (setq p (getpoint "\n点<退出>: "))
  4.     (princ (car p) WJ)
  5.     (princ "," WJ)
  6.     (princ (cadr p) WJ)
  7.     (princ "\n" WJ)
  8.   )
  9.   (close WJ)
  10.   (princ)
  11. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 09:41 , Processed in 1.050266 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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