明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 386|回复: 19

[讨论] lisp函数提示输入的列表有缺陷

[复制链接]
发表于 2024-4-10 22:49 | 显示全部楼层 |阅读模式
捣鼓了一个lisp函数,将CAD中文字导出到excel文件,然后还可以将该文件导入CAD。但是一直提示相关错误,请大神导入CAD运行下,看看是哪里出了问题。


  1. (defun c:ExportToCSV ()
  2.   ; 获取当前CAD文件名
  3.   (setq dwgName (getvar "DWGNAME"))
  4.   ; 定义CSV文件名
  5.   (setq csvFileName (strcat dwgName ".csv"))
  6.   ; 定义CSV文件路径
  7.   (setq csvFilePath (strcat (getvar "DWGPATH") csvFileName))
  8.   ; 打开CSV文件准备写入
  9.   (with-open-file (out csvFilePath "w"
  10.     ; 选择AutoCAD中的文本对象
  11.     (setq ss (ssget "X" "TEXT,MTEXT"))
  12.     ; 遍历选择集
  13.     (while ss
  14.       (setq obj (ssname ss 0))
  15.       (setq ss (ssname ss 1))
  16.       ; 获取文本内容、样式、图层等信息
  17.       (setq text (cdr (assoc 1 (entget obj))))
  18.       (setq style (cdr (assoc 2 (entget obj))))
  19.       (setq layer (cdr (assoc 8 (entget obj))))
  20.       (setq height (cdr (assoc 40 (entget obj))))
  21.       (setq width (cdr (assoc 41 (entget obj))))
  22.       ; 写入CSV文件
  23.       (format out "~A,~A,~A,~A,~A~%" text style layer height width)
  24.     )
  25.   )
  26.   (princ (strcat "\n文本信息已导出到 " csvFilePath))
  27.   (princ)
  28. )





  29. (defun c:ImportFromCSV ()
  30.   ; 获取当前CAD文件名
  31.   (setq dwgName (getvar "DWGNAME"))
  32.   ; 定义CSV文件名
  33.   (setq csvFileName (strcat dwgName ".csv"))
  34.   ; 定义CSV文件路径
  35.   (setq csvFilePath (strcat (getvar "DWGPATH") csvFileName))
  36.   ; 检查CSV文件是否存在
  37.   (if (not (vl-filename-exists-p csvFilePath))
  38.     (princ "CSV文件不存在。")
  39.     (progn
  40.       ; 打开CSV文件准备读取
  41.       (setq in (open csvFilePath "r"))
  42.       ; 读取CSV文件中的每一行
  43.       (while (setq line (read-line in nil nil))
  44.         ; 分割每行的数据
  45.         (setq data (strtok line #\,))
  46.         ; 依次获取文本内容、样式、图层、高度、宽度
  47.         (setq text (car data))
  48.         (setq style (cadr data))
  49.         (setq layer (caddr data))
  50.         (setq height (cadddr data))
  51.         (setq width (cadddr data 2))
  52.         ; 在AutoCAD中搜索原有的文本对象
  53.         (setq ss (ssget "X" (strcat "TEXT,'" text "'")))
  54.         ; 遍历选择集
  55.         (while ss
  56.           (setq obj (ssname ss 0))
  57.           (setq ss (ssname ss 1))
  58.           ; 更新文本样式、图层、高度、宽度等属性
  59.           (command "_.STYLE" obj style)
  60.           (command "_.CHANGELAYER" obj layer)
  61.           (command "_.TEXTHEIGHT" obj height)
  62.           (command "_.TEXTWIDTH" obj width)
  63.         )
  64.       )
  65.       (close in)
  66.       (princ (strcat "\n文本信息已从 " csvFilePath "导入并更新。"))
  67.     )
  68.   )
  69. )


本帖子中包含更多资源

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

x
发表于 2024-4-13 08:10 | 显示全部楼层
你是直接在TXT里保存的吧  要另存为 ANSI格式的 或者在vlisp里保存
回复 支持 1 反对 0

使用道具 举报

发表于 2024-4-11 11:57 | 显示全部楼层
你用得AI是假的吧  代码错的太离谱了
回复 支持 1 反对 0

使用道具 举报

发表于 2024-4-12 21:39 | 显示全部楼层
  1. (defun c:ExportTextToCSV (/ ali1 ali2 ent f fname fpath height i ss style text width)
  2.   (setq ss (ssget '((0 . "TEXT,MTEXT"))))
  3.   (if ss
  4.     (progn
  5.       (setq fpath (getvar "DWGPREFIX"))
  6.       (setq fname (strcat fpath (vl-filename-base (getvar "DWGNAME")) ".csv"))
  7.       (setq f (open fname "w"))
  8.       (write-line "Content,Style,Alignment,Height,WidthFactor" f)
  9.       (setq i 0)
  10.       (repeat (sslength ss)
  11.         (setq ent (entget (ssname ss i)))
  12.         (setq i (+ i 1))
  13.         (setq text (cdr (assoc 1 ent)))
  14.         (setq style (cdr (assoc 7 ent)))
  15.                                 (setq ali1 (cdr (assoc 72 ent)))
  16.         (setq ali2 (cdr (assoc 73 ent)))
  17.         (setq height (cdr (assoc 40 ent)))
  18.         (setq width (cdr (assoc 41 ent)))
  19.         (write-line (strcat text "," style "," (itoa ali1) "," (itoa ali2) "," (rtos height) "," (rtos width)) f)
  20.       )
  21.       (close f)
  22.       (princ "\n导出完成。")
  23.     )
  24.     (princ "\n没有选择任何文字对象。")
  25.   )
  26.   (princ)
  27. )

  28. (defun c:ImportTextFromCSV (/ ali1 ali2 data f fname fpath gd kgb line pt wz zt)
  29.   (setq fpath (getvar "DWGPREFIX"))
  30.   (setq fname (strcat fpath (vl-filename-base (getvar "DWGNAME")) ".csv"))
  31.   (setq f (open fname "r"))
  32.   (if f
  33.     (progn
  34.       (read-line f)
  35.       (while (setq line (read-line f))
  36.         (setq data (read (strcat "(" (vl-string-translate "," " " line) ")")))
  37.                                 (setq text (vl-princ-to-string (nth 0 data)))
  38.                                 (setq style (vl-princ-to-string (nth 1 data)))
  39.                                 (setq ali1 (nth 2 data))
  40.                                 (setq ali2 (nth 3 data))
  41.                                 (setq height (nth 4 data))
  42.                                 (setq width (nth 5 data))
  43.                                 (setq pt (getpoint "\n指定插入点:"))
  44.         (entmake(list '(0 . "text")'(50 . 0.0) (cons 10 pt)(cons 11 pt)(cons 1 text)(cons 7 style)(cons 40 height)'(6 . "Continuous")(cons 41 width)(cons 72 ali1)'(210 0.0 0.0 1.0)'(100 . "AcDbText")(cons 73 ali2)))
  45.       )
  46.       (close f)
  47.       (princ "\n导入完成。")
  48.     )
  49.     (princ "\n未找到CSV文件。")
  50.   )
  51.   (princ)
  52. )
发表于 2024-4-11 00:24 | 显示全部楼层

本帖子中包含更多资源

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

x
 楼主| 发表于 2024-4-11 11:21 | 显示全部楼层

我删除或者增加都不能解决问题,方便帮我调试下吗?谢谢啦
发表于 2024-4-11 11:37 | 显示全部楼层
调不了 AI都写不出这么多毛病的代码
 楼主| 发表于 2024-4-11 11:47 | 显示全部楼层
飞雪神光 发表于 2024-4-11 11:37
调不了 AI都写不出这么多毛病的代码

大神一看就知道这是AI写的。
 楼主| 发表于 2024-4-11 13:56 | 显示全部楼层
飞雪神光 发表于 2024-4-11 11:57
你用得AI是假的吧  代码错的太离谱了

所以目前AI还是取代不了人的大脑。
下面的代码是GPT写的,也是有错误。

  1. (defun c:ExportTextToCSV (/ ss i fpath fname ent text style align height width)
  2.   ;; 选择要导出的文字对象
  3.   (setq ss (ssget '((0 . "TEXT,MTEXT"))))
  4.   (if ss
  5.     (progn
  6.       ;; 获取CAD文件名用于CSV文件命名
  7.       (setq fpath (getvar "DWGPREFIX"))
  8.       (setq fname (strcat fpath (vl-filename-base (getvar "DWGNAME")) ".csv"))
  9.       ;; 打开文件用于写入
  10.       (setq f (open fname "w"))
  11.       ;; 写入CSV头部
  12.       (write-line "Content,Style,Alignment,Height,WidthFactor" f)
  13.       ;; 遍历选择集
  14.       (repeat (sslength ss)
  15.         (setq ent (entget (ssname ss i)))
  16.         (setq i (+ i 1))
  17.         ;; 获取文字内容和格式信息
  18.         (setq text (cdr (assoc 1 ent)))
  19.         (setq style (cdr (assoc 7 ent)))
  20.         (setq align (cdr (assoc 72 ent)))
  21.         (setq height (cdr (assoc 40 ent)))
  22.         (setq width (cdr (assoc 41 ent)))
  23.         ;; 写入到CSV文件
  24.         (write-line (strcat text "," style "," (itoa align) "," (rtos height) "," (rtos width)) f)
  25.       )
  26.       ;; 关闭文件
  27.       (close f)
  28.       (princ "\n导出完成。")
  29.     )
  30.     (princ "\n没有选择任何文字对象。")
  31.   )
  32.   (princ)
  33. )

  34. (defun c:ImportTextFromCSV (/ fpath fname f line data ent pt)
  35.   ;; 获取CAD文件名用于查找CSV文件
  36.   (setq fpath (getvar "DWGPREFIX"))
  37.   (setq fname (strcat fpath (vl-filename-base (getvar "DWGNAME")) ".csv"))
  38.   ;; 打开文件用于读取
  39.   (setq f (open fname "r"))
  40.   (if f
  41.     (progn
  42.       ;; 跳过CSV头部
  43.       (read-line f)
  44.       ;; 循环读取每一行
  45.       (while (setq line (read-line f))
  46.         ;; 解析CSV行
  47.         (setq data (read (strcat "(" (subst "," " " (vl-string-translate "," " " line)) ")")))
  48.         ;; 创建新的文字对象
  49.         (command "._mtext" (getpoint "\n指定插入点: ") "Height" (nth 3 data) (strcat (nth 0 data)))
  50.       )
  51.       ;; 关闭文件
  52.       (close f)
  53.       (princ "\n导入完成。")
  54.     )
  55.     (princ "\n未找到CSV文件。")
  56.   )
  57.   (princ)
  58. )
发表于 2024-4-11 14:51 | 显示全部楼层
嗯 代码还是有点毛病
 楼主| 发表于 2024-4-11 21:55 | 显示全部楼层
飞雪神光 发表于 2024-4-11 14:51
嗯 代码还是有点毛病

大神可以帮忙调整下这段代码吗?不胜感激
发表于 2024-4-11 23:00 | 显示全部楼层
论坛搜一搜都有现成的,需要AI写?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-1 18:55 , Processed in 0.604608 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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