明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2335|回复: 4

如何将文本格式的点坐标文件展出来呢?

[复制链接]
发表于 2005-4-14 10:46:00 | 显示全部楼层 |阅读模式
文本文件的内容:


点号,X坐标,Y坐标,高程


1,100,200,50


2,33,45,78


……


在CAD里显示为点和字符,字符的分子为高程,分母为点号!!
发表于 2005-4-16 22:00:00 | 显示全部楼层
(defun c:SJHX ()
(alert
"数据格式:
角点 X坐标 Y坐标
1 X坐标 Y坐标
2 X坐标 Y坐标
3 X坐标 Y坐标
..."
)
(prompt "\n\t稍候 ")
(setq tn (getfiled "坐标数据文件(txt;dat;*)" "" "txt;dat;*" 2))
(setq fle (findfile tn))
(if (not fle)
(setq fle (getfiled "请选择数据文件" "txt1" "txt;dat;*" 8))
)
(if fle
(progn
(setq fn (open fle "r"))
(command "pline")
(setq pt (read-line fn))
(while (setq pt (read-line fn))
(princ ".")
(setq xy (read (strcat "(" pt ")")))
(command (cdr xy))
)
(initget "y n")
(setq key (getkword"\n是否闭合(y/n)"))
(if (= key "y")
(command "c")
(command "")
)
(close fn)
)
(princ "\n未选择数据文件,退出")
)
(prompt " 完毕!")
)
发表于 2005-4-16 22:27:00 | 显示全部楼层
楼上照抄程序是不行的,只能用于数据画线(SJHX)。
 楼主| 发表于 2005-4-17 09:35:00 | 显示全部楼层
应该怎么处理呢?
 楼主| 发表于 2005-4-17 10:09:00 | 显示全部楼层
(defun c:csv ( / f savecmdecho n)
(prompt "\n此程序只限于读取以逗号(,)为分隔符的文件,各列数据的顺序依次为:点号,数学坐标X值,数学坐标Y值,Z值。")
(setq f (getstring "\n请输入逗号分隔符文件的全称及其路径:"));设置变量f作为逗号分隔符文件全称及其路径的字符串值。
(prompt "\n正在读取文件中的数据...")
(princ)
(setq f (open f "r"));用open函数来打开文件,并把打开的文件指针传递给变量f。 (setq savecmdecho (getvar "cmdecho"))
(setq saveosmode (getvar "osmode"))
(setq savesnapmode (getvar "snapmode"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(setvar "snapmode" 0)
(setq n 0)

(while;循环读取行数据并画点标注的函数。
(setq s (read-line f));此行用来判断是否读完了文件,如果是则返回nil。
(setq s (DeleteBlank s));调用DeleteBlank函数,去掉变量s前面的空格。
(while
(= s "");如果变量s不是空字符串,则跳出此循环,否则读取下一行数据。
(setq s (read-line f));读取下一行数据。
(if;判断是否已经读到文件的末尾。
(= s nil)
(princ "\已经完成读取\n")
(setq s (DeleteBlank s));未读到文件的末尾,去掉字符串前的一个空格。
)
) (while
(= (substr s 1 1) ",");如果变量s不是逗号,则跳出此循环,否则读取下一行。
(setq s (read-line f));读取下一行数据。

(while
(= s "");如果变量s不是空字符串,则跳出此循环,否则读取下一行数据。
(setq s (read-line f));读取下一行数。

(if;判断是否已经读到文件的末尾。
(= s nil)
(princ "\已经完成读取\n")
(setq s (DeleteBlank s));未读到文件的末尾,去掉字符串前的一个空格。
)

)
)

(if
(/= s nil);如果不是文件的末尾,则调用Draw函数画点、标注。
(Draw s);调用画点及标注函数,调用一次来画并标注一个点。
(princ)
) (if
(/= s nil);如果不是文件的末尾,则累加读入的点数。
(setq n (+ n 1))
)

)

(close f);关闭文件。
(setvar "cmdecho" savecmdecho)
(setvar "osmode" saveosmode)
(setvar "snapmode" savesnapmode)
(prompt (strcat "\n逗号隔符文件的点数据已经读取完毕;共读入<"(itoa n)">个点"))
(princ)

) (defun Draw (s0 / s1 k1 k2 k3 x y z x1 y1 z1 pt1 DH);定义画点及标注函数。

(setq s1 s0)

(setq s1 (CommaFirst s1));调用CommaFirst函数,来判断变量是否到达了以逗号为开头,如果则掉字符串逗号前面的子字符串。
             ;并把CommaFirst函数的返回值赋值给变量s1。

(setq k1 (- (strlen s0) (strlen s1)));计算出字符串中第一个子字符串(即点号)的长度。
(setq DH (substr s0 1 k1));把字符串中第一个子字符串赋值给变量DH。 (setq s1 (substr s1 2));把以逗号开头的字符串的最前面的逗号去掉。 (setq s1 (CommaFirst s1));调用CommaFirst函数

(setq k2 (- (strlen s0) (strlen s1)));计算出字符串中第2个子字符串(即点号)的长度。
(setq x (substr s0 (+ k1 2) (- k2 (+ k1 1))));把字符串中第2个子字符串赋值给变量x。 (setq s1 (substr s1 2));把以逗号开头的字符串的最前面的逗号去掉。 (setq s1 (CommaFirst s1));调用CommaFirst函数

(setq k3 (- (strlen s0) (strlen s1)));计算出字符串中第3个子字符串(即点号)的长度。
(setq y (substr s0 (+ k2 2) (- k3 (+ k2 1))));把字符串中第3个子字符串赋值给变量y。 (setq s1 (substr s1 2));把以逗号开头的字符串的最前面的逗号去掉。

(setq z s1);把字符串中第4个子字符串赋值给变量z。 (setq x1 (atof x) y1 (atof y) z1 (atof z));把字符串转换为实数。

(setq pt1 (list x1 y1 z1));创建点列表。 (command ".pdmode" "3");设置点的显示样式为“X”。 (command ".pdsize" ".5");设置点的显示大小为绝对尺寸0.5。

(command ".point" pt1);画点。 (setq DH (strcat " " DH));用strcat函数在变量DH前加一个有空格。

(command ".text" "j" "ml" pt1 1.2 0 DH);标注点号,要更改字体的大小春需把本行括号内的2更改即可。 ) (defun CommaFirst (s2);CommaFirst函数,来判断变量是否到达了以逗号为开头,如果则去掉字符串逗号前面的子字符串。
(while
(/= (substr s2 1 1) ",");判断变量是否到达了以逗号为开头,如果是则退出循环。
(setq s2 (substr s2 2));去掉字符串逗号前面的子字符串。
)
) (defun DeleteBlank (s3);DeleteBlank函数,去掉字符串最前面的空格。
(if
(= " " (substr s3 1 1));判断字符串前面是否有空格。如果有则执行while循环,否则执行(setq s3 s3)这一行。

(while
(= " " (substr s3 1 1))
(setq s3 (substr s3 2));去掉字符串最前面的一个空格,如果去掉一个空格后已无空格,则返回已经去掉空格的字符串。
) (setq s3 s3);不是以空格开头的字符串,则返回其原值。
)

) 该程序可以将坐标点展到CAD,求教各位如何才能实现字符的分子为高程,分母为点号???
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-29 10:19 , Processed in 0.170748 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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