- 积分
- 239
- 明经币
- 个
- 注册时间
- 2013-6-27
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
以下一段程序是读取文本文件,数据格式每行为“a1,2562.24,141542.55”,文件包括多行该类数据,其中每行第一个数为点号,后两个数为坐标。
本程序的目的为:遍历数据文件,以每一行的坐标数据向指定多义线作垂线,在未加“
(command "line" p0 (setvar "osmode" 128)(setq p3(getpoint p4 "\N输入下一点:")) (setvar "osmode"0))
”
时,程序可遍历文本文件全部数据,加了该行之后,就只能读取第一行数据并对指定多义线作垂线,后面的各行数据就无法处理程序就终止了,求各位高手指点一二,如何才能实现遍历文本文件,根据文本文件数据逐一对已有多义线作垂线。不胜感谢。
;;;将实测管线坐标按“点号,X坐标,Y坐标”格式存为他txt文档
;;;在CAD中调用本函数,半自动求解各点的里程数及偏距,并绘制偏距线,
;;;同时将其存入指定的TXT文档
(defun C:gxts()
(setvar "osmode" 0)
(setvar "cmdecho" 0)
(setq fle (getfiled "请选择要保存文件" " " "txt;*" 0))
(setq f(open fle "r"))
;;;遍历每一行数据
(while (setq data (read-line f))
(setq X_list (zhy_string_tok data ",") )
(setq a (car x_list)
x(atof(cadr x_list))
Y(atof(caddr x_list))
)
(princ "\na=")
(princ a)
(princ "\ny=")
(princ y)
(princ)
(command "zoom" "e")
(setq p0 (list x y))
(princ "\np0=")
(princ p0)
(command "line" p0 (setvar "osmode" 128)(setq p3(getpoint p4 "\N输入下一点:")) (setvar "osmode"0))
)
)
;;;;末尾括号
;;;数据读取函数代码,按指定格式读取文件数据
;;;将由某字符分隔的字串组成表
(defun zhy_string_tok(sstring sstr)
(setq string_list '())
(setq n2 (strlen sstr))
(while (setq m2 (vl-string-search sstr sstring))
(setq str_1 (substr sstring 1 m2))
(setq sstring (substr sstring (+ 1 m2 n2)))
(if (/= str_1 "")
(setq string_list (cons str_1 string_list))
)
)
(if (/= sstring "")
(setq string_list (cons sstring string_list))
)
( setq string_list(reverse string_list))
)
|
|