明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2303|回复: 14

[提问] 配置文件内容读取

[复制链接]
发表于 2022-5-15 01:44:14 | 显示全部楼层 |阅读模式
如何读取配置文件内的数据?

(defun C:TT()
;读取配置文件内的数据
(setq LL   配置文件内"LL="后的值)
(setq WW 配置文件内"WW="后的值)
(setq RR   配置文件内"RR="后的值)
(setq TT   配置文件内"TT="后的值)

(princ)
)


配置文件.ini 内容如下:
\\\\\\\\\\\\\\\\\\\\\\\\\\\

;注释行可忽略
;注释行可忽略
;

LL = 1.2
WW = 1.5
RR = 3.0
TT = 5.0
......

\\\\\\\\\\\\\\\\\\\\\\\\\\\




本帖子中包含更多资源

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

x
发表于 2022-5-16 22:36:59 | 显示全部楼层
  1. ;;;_$ (p-ini-read "D:\\Profile\\desktop\\新建文本文档.ini")
  2. ;;;(("LL" "1.2") ("WW" "1.5") ("RR" "3.0") ("TT" "5.0") ("......"))
  3. (defun p-ini-read (filename / file line content)
  4.   (if (and (setq filename (findfile filename))
  5.            (setq file (open filename "r"))
  6.       )
  7.     (progn
  8.       (while (setq line (read-line file))
  9.         (if (and (setq line (vl-string-trim " \t\n" line))
  10.                  (/= line "")
  11.                  (/= (p-string-left line 1) ";")
  12.                  (/= (p-string-left line 2) "\\\\")
  13.                  (setq line (p-string-tokenize line "="))
  14.             )
  15.           (setq        line        (mapcar '(lambda (e) (vl-string-trim " \t\n" e)) line)
  16.                 content        (cons line content)
  17.           )
  18.         )
  19.       )
  20.       (close file)
  21.       (reverse content)
  22.     )
  23.   )
  24. )
发表于 2022-5-15 16:34:50 | 显示全部楼层
写文件的时候不要“=”
直接用“空格”分隔
读出来的字符串
用read处理

(defun c:1()
        (setq biao1
                        (list
                                '("LL" 1.2)
                                '("MM" 3.0)
                                '("NN" 2.5)
                        )
        )
        (setq aaa (open "c:\\1.no" "w"))
        (foreach x biao1
                (prin1 x aaa)(princ "\n" aaa)
        )
        (close aaa)
(princ)
)
(defun c:2()
        (setq biao2 '())
        (setq aaa (open "c:\\1.no" "r"))
        (while (setq tt (read-line aaa))
                (setq biao2 (cons (read tt) biao2))
        )
        (close aaa)
        (setq biao2 (reverse biao2))
(princ)
)
发表于 2022-5-15 09:44:51 | 显示全部楼层
提供思路
1.
openfile 后readline ,一行一行的处理
接着根据获取的string,用wcmatch或者 vl-string-search 判断哪个是你要的.匹配到则 获取等号后的字符串
2
openfile后redline到一个表,对每个表元素用用wcmatch或者 vl-string-search 匹配
由于你这个都是=号分开的 可以从=断开 获取一个点表组成的表 就跟dxf组吗一样 用assoc获取等号后面的值
3.
如果你的这些个配置文件数据顺序是一定的,不需要具有可读性,可以只保留数据,不要前面的LL=一类的 这样读取比较简单 直接获取某行就行了
 楼主| 发表于 2022-5-15 14:45:54 来自手机 | 显示全部楼层
muwind 发表于 2022-5-15 09:44
提供思路
1.
openfile 后readline ,一行一行的处理

功能主要是储存变量的值到文本文档,方便以后读取变量的值,配置文件内可能有很多的数值,数据并不是固定的行
发表于 2022-5-15 16:42:06 | 显示全部楼层
你可以在上面范例的基础上
再尝试下面的做法
biao1去掉子表里的【双引号】写出
biao2作如下处理
(foreach x biao2
   (set (car x) (cadr x))
)
 楼主| 发表于 2022-5-15 19:35:23 来自手机 | 显示全部楼层
masterlong 发表于 2022-5-15 16:42
你可以在上面范例的基础上
再尝试下面的做法
biao1去掉子表里的【双引号】写出

好的,谢谢大哥指点,学习了
 楼主| 发表于 2022-5-16 20:47:42 | 显示全部楼层
有没有大神帮忙解决一下,自己搞了半天老是不对
发表于 2022-5-16 22:14:17 | 显示全部楼层
本帖最后由 vectra 于 2022-5-16 22:16 编辑

直接存LISP文件来保存变量不是更方便

("LL"  1.2)
("WW"  1.5)
("RR"  3.0)
("TT"  5.0)

read-line之后对其read操作 就是标准的lisp表,然后就可以愉快的操作了

刚看了下 和“地板”的代码思路是一致的
发表于 2022-5-16 22:17:21 | 显示全部楼层
我这源码都贴了
另一种方法也讲了
还搞不定?
发表于 2022-5-16 22:25:55 | 显示全部楼层
masterlong 发表于 2022-5-16 22:17
我这源码都贴了
另一种方法也讲了
还搞不定?

也许楼主不能接受lsp文件格式保存
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-16 13:01 , Processed in 0.181550 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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