duhan6401 发表于 2023-11-30 10:48:20

帮我看看程序怎么运行不起

本帖最后由 duhan6401 于 2023-11-30 10:51 编辑

我有一个这样的列表(("永管ZK248" "40" 219734.0 3.38701e+06 98710) ("永管ZK247" "40" 220133.0 3.38698e+06 98310) ("永管ZK245" "45" 220578.0 3.38693e+06 97862) ("永管ZK243" "45" 221556.0 3.
38673e+06 96841) ("永管ZK242" "40" 222451.0 3.38648e+06 95868) ("永管ZK241" "40" 223362.0 3.386e+06 94772) ("永管ZK240" "35" 224378.0 3.38625e+06 93685) ),想弄到电子表格里头是这样子的,
自己写的插件是下面这样的。可以一步一步运行,是不能整个程序一次性运行,不知道哪里的问题。求助

[*](defun c:wtt (/ aa pttxt yujikongshen1 konghao1 ptx pty ss1 dist1)
[*](setq ss1 (reverse ss1))
[*](setq K (length ss1))
[*](setq i 0)
[*](setqaa (open "d://钻孔坐标.xls" "w"));建立文本;W会把文本里面的内容清除
[*](princ "孔号" aa);用princ写入孔号
[*](princ "\t" aa)
[*](princ "预计孔深" aa);用princ写入孔深
[*](princ "\t" aa)
[*](princ "X坐标" aa);用princ写入X坐标
[*](princ "\t" aa)
[*](princ "Y坐标" aa);用princ写入Y坐标
[*](princ "\t" aa)
[*](princ "桩号" aa);用princ写入桩号
[*](princ "\n" aa);这个格式就换行
[*](repeat K
[*]    (setq pttxt (nth i ss1);;取得坐标文字
[*]      konghao1 (car pttxt);;取得孔号
[*]      yujikongshen1 (cadr pttxt)
[*]      ptx (caddr pttxt);;取得X坐标
[*]      pty (cadddr pttxt);;取得y坐标
[*]      dist1 (nth 4 pttxt)
[*]    )
[*]    (princ konghao1 aa);用princ写入孔号
[*]    (princ "\t" aa)
[*]    (princ yujikongshen1 aa);用princ写入孔深
[*]    (princ "\t" aa)
[*]    (princ ptx aa);用princ写入X坐标
[*]    (princ "\t" aa)
[*]    (princ pty aa);用princ写入Y坐标
[*]    (princ "\t" aa)
[*]    (princ dist1 aa);用princ写入桩号
[*]    (princ "\n" aa);这个格式就换行
[*]    (setq i (+ i 1))
[*])
[*](close aa);;关闭文本(结束后必须关闭)
[*])

guosheyang 发表于 2023-11-30 13:09:47

http://bbs.mjtd.com/thread-187020-1-1.html
这里有做好的代码

liuhe 发表于 2023-11-30 13:33:16

建议前期新手学习csv文件,excel文件有点麻烦,需要专门的函数、csv文件也可以用excel打开

(defun c:wtt (/ aa pttxt yujikongshen1 konghao1 ptx pty ss1 dist1)
(SETQ        SS1 '(("永管ZK248" "40" 219734.0 3.38701e+06 98710)
              ("永管ZK247" "40" 220133.0 3.38698e+06 98310)
              ("永管ZK245" "45" 220578.0 3.38693e+06 97862)
              ("永管ZK243" "45" 221556.0 3.38673e+06 96841)
              ("永管ZK242" "40" 222451.0 3.38648e+06 95868)
              ("永管ZK241" "40" 223362.0 3.386e+06 94772)
              ("永管ZK240" "35" 224378.0 3.38625e+06 93685)
             )
)
(setq ss1 (reverse ss1))
(setq K (length ss1))
(setq        i    0
        LST1 (LIST "孔号" "预计孔深" "X坐标" "Y坐标" "桩号")
)
(setq aa (open "d:\\钻孔坐标.CSV" "w"));;;注意\\//和区别,最好前期玩csv文件
;;;注意\\//和区别,最好前期玩csv文件,这个简单,excel 前期学习台麻烦
                                        ;建立文本;W会把文本里面的内容清除
;;;(princ "孔号" aa);用princ写入孔号
;;;(princ "\t" aa)
;;;(princ "预计孔深" aa);用princ写入孔深
;;;(princ "\t" aa)
;;;(princ "X坐标" aa);用princ写入X坐标
;;;(princ "\t" aa)
;;;(princ "Y坐标" aa);用princ写入Y坐标
;;;(princ "\t" aa)
;;;(princ "桩号" aa);用princ写入桩号
;;;(princ "\n" aa);这个格式就换行
(write-line
    (vl-string-right-trim
      ","
      (APPLY 'STRCAT
             (MAPCAR (FUNCTION (LAMBDA (X) (STRCAT X ","))) LST1)
      )
    )
    AA
)
(repeat K
    (setq pttxt        (nth i ss1)
                ;;取得坐标文字
;;;      konghao1 (car pttxt);;取得孔号
;;;      yujikongshen1 (cadr pttxt)
;;;      ptx (caddr pttxt);;取得X坐标
;;;      pty (cadddr pttxt);;取得y坐标
;;;      dist1 (nth 4 pttxt)
    )
    (write-line
      (vl-string-right-trim
        ","
        (APPLY 'STRCAT
             (MAPCAR (FUNCTION (LAMBDA (X)(STRCAT (vl-princ-to-string X) ",")))
                               pttxt
                     )
             )
        )
      AA
      )
   
;;;    (princ konghao1 aa);用princ写入孔号
;;;    (princ "\t" aa)
;;;    (princ yujikongshen1 aa);用princ写入孔深
;;;    (princ "\t" aa)
;;;    (princ ptx aa);用princ写入X坐标
;;;    (princ "\t" aa)
;;;    (princ pty aa);用princ写入Y坐标
;;;    (princ "\t" aa)
;;;    (princ dist1 aa);用princ写入桩号
;;;    (princ "\n" aa);这个格式就换行
    (setq i (+ i 1))
)
(close aa)
;;关闭文本(结束后必须关闭)
)

duhan6401 发表于 2023-12-1 10:50:18

liuhe 发表于 2023-11-30 13:33
建议前期新手学习csv文件,excel文件有点麻烦,需要专门的函数、csv文件也可以用excel打开

谢谢,我终于找到问题了,ss1数据是前面一个程序得来的,这个程序调用时候不能在后面重新定义,导致K就一直是0,就不能循环。我还得研究下你程序里头的那一堆mapcar

liuhe 发表于 2023-12-1 11:18:27

duhan6401 发表于 2023-12-1 10:50
谢谢,我终于找到问题了,ss1数据是前面一个程序得来的,这个程序调用时候不能在后面重新定义,导致K就一 ...

CSV文件是都号文件格式,每一行都是文字内容,用“,”隔开。那个作用是把第一行的内容,组成一个逗号隔开的字符串,直接用write-line   写一行。

duhan6401 发表于 2023-12-2 07:02:17

liuhe 发表于 2023-12-1 11:18
CSV文件是都号文件格式,每一行都是文字内容,用“,”隔开。那个作用是把第一行的内容,组成一个逗号隔 ...

(or pmtbl (setq pmtbl 2000))
(or yxws(setq yxws 1))
(defun c:wzbsc (/ aa pttxt yujikongshen1 konghao1 ptx ptydist1 K)
          (setq K (length ss1))
        (setq ss1 (reverse ss1))
        (setq i 0)
                        (setq LST1 '( "孔号" "预计孔深" "X坐标" "Y坐标" "桩号"))
                        (setq aa (open "d:\\钻孔坐标.CSV" "w"));;;注意\\和//区别,W会把文本里面的内容清除
                (write-line (vl-string-right-trim "," (APPLY 'STRCAT (MAPCAR (FUNCTION (LAMBDA (X) (STRCAT X ","))) LST1))) AA);;;每个元素后加逗号
        (repeat K
                                  (setq pttxt (nth i ss1) )
                                  (write-line (vl-string-right-trim "," (APPLY 'STRCAT (MAPCAR (FUNCTION (LAMBDA (X) (STRCAT (vl-princ-to-string X) ","))) pttxt ))) AA )
                                (setq i (+ i 1))
                        )
        (close aa)        ;;关闭文本(结束后必须关闭)
)
这段代码编译时候总是出错,; 错误: 参数值错误: 非负: -1,不知道是哪个东西的原因。
页: [1]
查看完整版本: 帮我看看程序怎么运行不起