找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1192|回复: 10

[求助] [求助]:读入数据文件问题,多谢

[复制链接]
发表于 2005-7-16 21:43:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
举例说明,我的数据文件是点的坐标X,Y,Z,我只会分为三行读入,
500
1000
2000
如果我想一行输入,通过空格或逗号来区分
500,1000,2000
程序怎样识别出X,Y,Z
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-7-16 23:51:37 | 显示全部楼层
最好用空格分开xyz数值。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-17 00:06:14 | 显示全部楼层
xyp1964 还是说得更清楚些比较好
: )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-17 00:27:31 | 显示全部楼层
最初由 wkai 发布
[B]xyp1964 还是说得更清楚些比较好
: ) [/B]

格式:
x坐标 y坐标 z坐标
x坐标 y坐标 z坐标
x坐标 y坐标 z坐标
x坐标 y坐标 z坐标
x坐标 y坐标 z坐标
……
  1. [FONT=courier new];;;数据画线
  2. ;;;文本格式的一组坐标点调入AutoCAD自动绘制段线或多线段
  3. ;;;已知一组 X、Y ,并且已写入一文件TXT1.TXT,要根据此文件让其自动用“PLINE”绘出。
  4. ;;;文件内容格式如下:
  5. ;;;X坐标 Y坐标 Z坐标
  6. ;|实例:
  7. 123 456
  8. 222 333
  9. 444 555
  10. 777 888
  11. 888 999
  12. 999 754
  13. 111 755
  14. 333 666
  15. 555 777
  16. |;
  17. (defun c:test105 ()
  18.   (CMDLA0)
  19.   (alert
  20.     "数据格式:
  21.   X坐标 Y坐标 Z坐标
  22.   X坐标 Y坐标 Z坐标
  23.   X坐标 Y坐标 Z坐标
  24.   X坐标 Y坐标 Z坐标
  25.   X坐标 Y坐标 Z坐标
  26.   ..."
  27.   )
  28.   (prompt "\n\t稍候 ")
  29.   ;(MKLA "建筑-红线" 1)
  30.   (setq tn (getfiled "坐标数据文件(txt;dat;*)" "" "txt;dat;*" 2))
  31.   (setq fle (findfile tn))
  32.   (if (not fle)
  33.     (setq fle (getfiled "请选择数据文件" "txt1" "txt;dat;*" 8))
  34.   )
  35.   (if fle
  36.     (progn
  37.       (setq fn (open fle "r"))
  38.       (command "pline")
  39.       (while (setq pt (read-line fn))
  40.         (princ ".")
  41.         (command (read (strcat "(" pt ")")))
  42.       )
  43.       (command "")
  44.       (close fn)
  45.     )
  46.     (princ "\n未选择数据文件,退出")
  47.   )
  48.   (prompt " 完毕!")
  49.   (CMDLA1)
  50. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-17 01:21:49 | 显示全部楼层
xyp1964  的意思应该是写入时用空格隔开,
(setq xyz-str (strcat (rtos x 2 2) " "(rtos y 2 2)" "(rtos y 2 2)))
读的时候就可以
(setq xyz-list (read (strcat "(" xyz-str  ")"))),方便一些。
当然你也可以不用空格,明经那里有关于字串和表互转的函数,可以用各种分隔符。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-17 09:22:08 | 显示全部楼层
X坐标 Y坐标 Z坐标
X坐标 Y坐标 Z坐标
X坐标 Y坐标 Z坐标
  1. [FONT=courier new](defun c:test141 ()
  2.   (cmdla0)
  3.   (alert (strcat "数据格式:"                "\nX坐标 Y坐标 Z坐标"
  4.                  "\nX坐标 Y坐标 Z坐标"        "\nX坐标 Y坐标 Z坐标"
  5.                  "\n..."                "\n..."
  6.                  "\n..."
  7.                 )
  8.   )
  9.   (prompt "\n稍候 : ")
  10.   (MKLA "建筑-红线" 1)
  11.   (while (not
  12.            (setq tn (getfiled "坐标数据文件(txt;dat;*)" "" "txt;dat;*" 2))
  13.          )
  14.   )
  15.   (setq        fle    (findfile tn)
  16.         pt-lst '()
  17.   )
  18.   (if (not fle)
  19.     (setq fle (getfiled "请选择坐标数据文件" "" "txt;dat;*" 8))
  20.   )
  21.   (if fle
  22.     (progn
  23.       (setq fn (open fle "r")
  24.             n  0
  25.       )
  26.       (command "pline")
  27.       (while (setq pt (read-line fn))
  28.         (setq pt     (read (strcat "(" pt ")"))
  29.               pt-lst (cons pt pt-lst)
  30.               n             (1+ n)
  31.         )
  32.         (command pt)
  33.         (princ ".")
  34.       )
  35.       (command "")
  36.       (close fn)
  37.       (jzhz)
  38.       (MKLA "坐标" 3)
  39.       (mapcar '(lambda (#pt) (x_zb #pt)) pt-lst)
  40.       (princ "共输入和标注 ")
  41.       (princ n)
  42.       (princ " 个坐标点!")
  43.     )
  44.     (princ "\n未选择数据文件,退出")
  45.   )
  46.   (cmdla1)
  47. )[/FONT]


点位号 X坐标 Y坐标 Z坐标
点位号 X坐标 Y坐标 Z坐标
点位号 X坐标 Y坐标 Z坐标
  1. [FONT=courier new](defun c:test141a ()
  2.   (cmdla0)
  3.   (alert (strcat "数据格式 : "
  4.                  "\n点位号 X坐标 Y坐标 Z坐标"
  5.                  "\n点位号 X坐标 Y坐标 Z坐标"
  6.                  "\n点位号 X坐标 Y坐标 Z坐标"
  7.                  "\n..."
  8.                  "\n..."
  9.                  "\n..."
  10.                 )
  11.   )
  12.   (prompt "\n稍候 : ")
  13.   (MKLA "建筑-红线" 1)
  14.   (while (not
  15.            (setq tn (getfiled "坐标数据文件(txt;dat;*)" "" "txt;dat;*" 2))
  16.          )
  17.   )
  18.   (setq        fle    (findfile tn)
  19.         pt-lst '()
  20.   )
  21.   (if (not fle)
  22.     (setq fle (getfiled "请选择坐标数据文件" "" "txt;dat;*" 8))
  23.   )
  24.   (if fle
  25.     (progn
  26.       (setq fn (open fle "r")
  27.             n  0
  28.       )
  29.       (command "pline")
  30.       (while (setq pt (read-line fn))
  31.         (setq pt     (cdr (read (strcat "(" pt ")")))
  32.               pt-lst (cons pt pt-lst)
  33.               n             (1+ n)
  34.         )
  35.         (command pt)
  36.         (princ ".")
  37.       )
  38.       (command "")
  39.       (close fn)
  40.       (jzhz)                                ;加载汉字
  41.       (MKLA "坐标" 3)
  42.       (mapcar '(lambda (#pt) (x_zb #pt)) pt-lst) ;标注顶点坐标
  43.       (princ "共输入和标注 ")
  44.       (princ n)
  45.       (princ " 个坐标点!")
  46.     )
  47.     (princ "\n未选择数据文件,退出")
  48.   )
  49.   (cmdla1)
  50. )[/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-7-17 10:29:33 | 显示全部楼层
我的程序是
(defun c:zzt (/)
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
  (setq f (open "c:/1/ZKBZt.dat" "r"))

                                       
  (command "layer" "m" "ZK" "l"        "continuous" "zk" "c" "red" "zk" "")
  (command "layer" "s" "ZK" "")

  (setq sj (read-line f))                ;getreal "\ÊäÈëÏÂÒ»µã¹«Àï±ê:"))

  (while sj
    (setq sj (read (strcat "(" sj ")")))
    (setq kh (nth 0 sj))               
    (progn
      (princ "kh=")
      (princ kh)
    )
    (setq d (list (nth 1 sj) (nth 2 sj)))
    (setq bzd (list (+ (car d) 20) (- (cadr d) 3)))
    (command "DOnuT" 0 6 d "")
    (command "text" bzd 6 0 kh )
   
    (setq sj nil)
    (setq kh nil)
     (setq d nil)
     (setq bzd nil)

    (setq sj (read-line f))
  )
  (CLOSE F)
)

数据文件格式是:
05-ZC-1200  485762 423645
在执行到TEXT处,文字写不上去,原因是数据类型错误,我查了KH的类型是SYM,难道从表中提取的元素的类型都是SYM,如何转换成STR?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-17 10:34:33 | 显示全部楼层
可以不用空格
因为:
(command ".point" (x y z))和 (command ".point" "x,y,z")是一样的,
如果文本写成 x,y,z的格式
直接读入做为点的坐标就可以了,不用转换为表
但注意文本中的","号要用半角字符
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 111个

财富等级: 日进斗金

发表于 2005-7-17 22:10:18 | 显示全部楼层
;用以下程序段,可以读如下的三种格式的数据文件,并存入表fhb中:
;(1)格式1(空格作分隔)
;点位号 X坐标 Y坐标 Z坐标
;点位号 X坐标 Y坐标 Z坐标
;点位号 X坐标 Y坐标 Z坐标
;(2)格式2(英文状态的“,”号作分隔)
;点位号, X坐标, Y坐标, Z坐标
;点位号, X坐标, Y坐标, Z坐标
;点位号, X坐标, Y坐标, Z坐标
;(3)格式3(中文状态的“,”号作分隔)
;点位号, X坐标, Y坐标, Z坐标
;点位号, X坐标, Y坐标, Z坐标
;点位号, X坐标, Y坐标, Z坐标

   (setq ff (open (getfiled "请选择要展点的数据文件" "" "txt" 2) "r")
         fhb nil
   )
   (while (setq zb (read-line ff))
      (setq zb (vl-string-translate ","  " " (vl-string-translate ","  " " zb))
            zb (read (strcat "(" zb ")"))
            fhb (append fhb (list (cons (vl-princ-to-string (car zb)) (cdr zb))))
                                       
      )
   )
   (close ff)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2005-7-18 01:02:13 | 显示全部楼层
最初由 cy956 发布
[B]xyp1964  的意思应该是写入时用空格隔开,
(setq xyz-str (strcat (rtos x 2 2) " "(rtos y 2 2)" "(rtos y 2 2)))
读的时候就可以
(setq xyz-list (read (strcat "(" xyz-str  ")"))),方便一些。
当然你也可以... [/B]


这里也有相同的函数,不会比明经上差的.
找找.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-7-18 08:01:33 | 显示全部楼层
8楼的问题是先read,后提取引起的,数据由字符串变成了字符,过程如下:
"05-ZC-1200 485762 423645"     ;(setq sj (read-line f))
"(05-ZC-1200 485762 423645)"   ;(strcat "(" sj ")")
(05-ZC-1200 485762 423645)      ;(setq sj (read (strcat "(" sj ")")))
05-ZC-1200                                  ;(setq kh (nth 0 sj))
如想得到字符串,应先处理,后read。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-12-27 05:25 , Processed in 0.556939 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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