糊涂医生 发表于 2013-7-8 20:50:11

求赐教:这段作垂线程序问题出在哪?

以下一段程序是读取文本文件,数据格式每行为“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))
      
)

糊涂医生 发表于 2013-7-8 20:52:23

这段程序其他功能还没完善,现在卡在逐一点作垂线上料

糊涂医生 发表于 2013-7-8 20:54:25

还有就是“vl-string-search ”此类函数在哪里可以找到用法,这个函数是我看别人程序学到的,可是还有很多函数我看不懂,又不知在哪可以查找相关的资料。求各位高手指点迷津,谢谢。

zyhandw 发表于 2013-7-9 09:40:21

糊涂医生 发表于 2013-7-8 20:52 static/image/common/back.gif
这段程序其他功能还没完善,现在卡在逐一点作垂线上料

自己好好检查下程序,有p4这个点吗?

fl202 发表于 2013-7-9 15:17:33

(command "line" (getpoint"输入一一点:") (setvar "osmode" 128)(setq p3(getpoint"输入下一点:")) "")
程序错误,无法执行,需要点或选项关键字。
; 错误: 函数被取消。

(setvar "osmode" 128)
(command "line" (getpoint"输入一一点:") (setq p3(getpoint (getvar "lastpoint") "输入下一点:")) "")
(setvar "osmode" 0)
可以执行。

糊涂医生 发表于 2013-7-9 15:28:27

谢谢各位,我刚才想到了另外一种解决办法,就是把 (command "line" p0 (setvar "osmode" 128)(setq p3(getpoint p4 "\N输入下一点:")) (setvar "osmode"0))
拆分成
(setvar "osmode" 128)
(setq p1(getpoint p0 "\N输入下一点:")
(setvar "osmode"0))
(command "line" p0 p1 ""

其中原来getpoint 函数后面的p4 改为p0 当时在学习这个函数时没把这个函数的各项参数搞明白。

糊涂医生 发表于 2013-7-9 15:29:45

哦输快了点,最后一行忘了加闭括号。(command "line" p0 p1 "")

糊涂医生 发表于 2013-7-9 15:31:06

调试过了,没问题。

糊涂医生 发表于 2013-7-9 15:32:52

zyhandw 发表于 2013-7-9 09:40 static/image/common/back.gif
自己好好检查下程序,有p4这个点吗?

这个是我没搞清楚getpoint函数的参数意义,这个程序中应该改成p0

zyhandw 发表于 2013-7-9 16:48:49

糊涂医生 发表于 2013-7-9 15:32 static/image/common/back.gif
这个是我没搞清楚getpoint函数的参数意义,这个程序中应该改成p0

对啊,本来没问题!结果就是因为没搞清楚这一点,才出了错
页: [1]
查看完整版本: 求赐教:这段作垂线程序问题出在哪?