明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2291|回复: 4

[求助]春节好,发洋财,我还在学…………

[复制链接]
发表于 2003-2-1 12:02:00 | 显示全部楼层 |阅读模式
我在学…………
如何提取一个预订义文件的内容并显示在编辑框里,看了书搞不懂
请高手指教…………这里菜鸟先谢了

对话框文件
// ==========================================================
lib_ydth : dialog {
        label = "文件路径";
           : edit_box {
               label = "路径&F:";
               key = "re_ydth";
               width = 20;
           }
           : boxed_row {
               fixed_width = true;
               fixed_height = true;
               alignment = centered;
           : list_box {
               label = "子目录:";
               width = 24;
               height = 10;
               fixed_height = true;
               key = "indx_2";
            }
          }
   spacer;
ok_only;
}

;lisp文件
;; ==========================================================
(defun c:ydth (/ dcl_id lib_ydth_list)
  (setq dcl_id (load_dialog "lib_ydth.dcl"))
  (if (not (new_dialog "lib_ydth" dcl_id))
    (exit)
  )
  (defun yd_startter ()
    (setq lib_ydth_list (open (re_ydth "ydth.dat") "r"))
    (start_list "lib_ydth_list" 1 0)
    (add_list "lib_ydth_list" 0)
    (end_list)
  )
  (action_tile "lib_name" "(re_name)")
  (action_tile "lib_new" "(cr_lib)")
  (action_tile "accept" "(done_dialog)")
  (start_dialog)
  (unload_dialog dcl_id)
  (princ "ydth已加载")
  (princ)
)

预定义文本文件内容

E:\AutoCAD R14\libs
E:\AutoCAD R14\jdcad
发表于 2003-2-1 17:27:00 | 显示全部楼层

两个问题如下

1.路径问题,你通过输入路径后,需要将路径组合到所要取得文件名中,可以使用strcat函数来组合两个字符串,如
  (setq FilePathName (strcat re_ydth "ydth.dat"))
这样就可以组合出文件的完整路径,其实你可以在弹出你自定义的对话框前用findfile函数先手工选择你所要的文件。这样比较合理。
2.对于将文件中的内容写到列表中,可以使用实用函数中的mc_getfile函数来将文件按行转换成列表:
          (setq des_list (mc_getfile "FilePathName") )
然后再通过以下语句来填充列表框:
        (start_list ""lib_ydth_list")
        (mapcar 'add_list des_list)
        (end_list)
函数链接如下:
http://www.mjtd.com/function/list.asp?id=119
 楼主| 发表于 2003-2-1 18:23:00 | 显示全部楼层

谢意…………

首先祝斑竹羊年愉快,明经越办越旺,非常感谢指点…………
羊年初一
菜鸟上
 楼主| 发表于 2003-2-6 17:39:00 | 显示全部楼层

在问个问题…………对我来说是个问题

指定要打开文件的路径语法是什么?如果不在cad的配置路径里面怎么用?
另:想在一个文件里存取两类信息比如名称、编号,然后分别填充在a,b两个列表框里,我现在是打开两个文件存取(怎么优化一下)
(defun c:re_ydth (/               dcl_id            all_lisp_list
                  all_blk_list current_line re_ydth         indx_2
                  indx_3       load_lib            jdcad_lib         jdcad_blk
                  lib_lisp     lib_str            name         list_str
                  ai_str       ai_lisp            I:Path
                 )
  (setq dcl_id (load_dialog "list_path.dcl"))
  (if (not (new_dialog "list_path" dcl_id))
    (exit)
  )
  (setq I:Path "E:/AutoCAD R14/libs")
  (if (not (setq filename (findfile "jdcad.lib")))
    (setq filename "jdcad.lib")
  )
  (if (setq jdcad_lib (open filename "r"))
    (progn
      (setq current_line (read-line jdcad_lib))
      (while (and (/= "" current_line)
                  (/= nil current_line)
                  (/= ":" (substr current_line 1 1))
             )
        (setq current_line (read-line jdcad_lib))
        (while current_line
          (setq name (substr current_line 10))
          (setq all_lisp_list (cons name all_lisp_list))
          (setq all_lib_list (cons name all_lib_list))
          (setq current_line (read-line jdcad_lib))
          (while (/= ":" (substr current_line 1 1))
            (setq lib_lisp (cons (read current_line) lib_lisp))
            (setq current_line (read-line jdcad_lib))
          )
          (set (read (strcat "ai_lisp|" name)) (reverse lib_lisp))
          (setq lib_lisp '())
          (setq current_line (read-line jdcad_lib))
          (while
            (and current_line (/= ":" (substr current_line 1 1)))
             (setq current_line (read-line jdcad_lib))
             (< (length all_lisp_list) (getvar "maxsort"))
          )
          (setq all_lisp_list (acad_strlsort all_lisp_list))
        )
        (start_list "indx_2")
        (mapcar 'add_list all_lisp_list)
        (end_list)
        (set_tile "indx_2" "0")
        (close jdcad_lib)
      )
    )
  )
  (if (not (setq filename (findfile "jdcad.blk")))
    (setq filename "jdcad.blk")
  )
  (if (setq jdcad_blk (open filename "r"))
    (progn
      (setq current_line (read-line jdcad_blk))
      (while (and (/= "" current_line)
                  (/= nil current_line)
                  (/= ":" (substr current_line 1 1))
             )
        (setq current_line (read-line jdcad_blk))
        (while current_line
          (setq name (substr current_line 10))
          (setq all_blk_list (cons name all_blk_list))
          (setq current_line (read-line jdcad_blk))
          (while (/= ":" (substr current_line 1 1))
            (setq blk_lisp (cons (read current_line) blk_lisp))
            (setq current_line (read-line jdcad_blk))
          )
          (set (read (strcat "ai_lisp|" name)) (reverse blk_lisp))
          (setq blk_lisp '())
          (setq current_line (read-line jdcad_blk))
          (while
            (and current_line (/= ":" (substr current_line 1 1)))
             (setq current_line (read-line jdcad_blk))
             (< (length all_blk_list) (getvar "maxsort"))
          )
          (setq all_blk_list (acad_strlsort all_blk_list))
        )
        (start_list "indx_3")
        (mapcar 'add_list all_blk_list)
        (end_list)
        (set_tile "indx_3" "0")
        (close jdcad_blk)
      )
      (action_tile "up" "(up_down)")
      (mode_tile "up" 3)
      (mode_tile "re_lib" 2)
      (mode_tile "down" 3)
      (start_dialog)
      (unload_dialog dcl_id)
    )
  )
)
发表于 2003-2-6 21:59:00 | 显示全部楼层

选择目录的函数在LISP是没有,你可以用DOSLIB库或EXPRESS库中的函数

1.其实用getfiled函数直接选择文件也可以,这样可以直接选择你所需要的文件,或者这样也更直接看到你的配置文件是否在指定的目录下,而不是选完目录后才发现配置文件不在目录下。
2.如果说你的信息内容分为两类,而想放到同一个文件下,你可以在信息文件中加以区分,如:
[名称]
名称1
名称2
名称3
[编号]
编号1
编号2
编号3
这样就可以通过程序在读取行的时候先判断行内容是[名称]
如果是名称的话,则从下行开始将内容读取到一个变量列表中,如果遇到[编号],则从下行开始将内容读取到另外一个变量列表中,这样就可以了,再多的内容同样也可以完成。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 05:31 , Processed in 0.166749 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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