yu960312 发表于 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
......

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




vectra 发表于 2022-5-16 22:36:59

;;;_$ (p-ini-read "D:\\Profile\\desktop\\新建文本文档.ini")
;;;(("LL" "1.2") ("WW" "1.5") ("RR" "3.0") ("TT" "5.0") ("......"))
(defun p-ini-read (filename / file line content)
(if (and (setq filename (findfile filename))
           (setq file (open filename "r"))
      )
    (progn
      (while (setq line (read-line file))
        (if (and (setq line (vl-string-trim " \t\n" line))
               (/= line "")
               (/= (p-string-left line 1) ";")
               (/= (p-string-left line 2) "\\\\")
               (setq line (p-string-tokenize line "="))
          )
          (setq        line        (mapcar '(lambda (e) (vl-string-trim " \t\n" e)) line)
                content        (cons line content)
          )
        )
      )
      (close file)
      (reverse content)
    )
)
)

masterlong 发表于 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)
)

muwind 发表于 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=一类的 这样读取比较简单 直接获取某行就行了

yu960312 发表于 2022-5-15 14:45:54

muwind 发表于 2022-5-15 09:44
提供思路
1.
openfile 后readline ,一行一行的处理


功能主要是储存变量的值到文本文档,方便以后读取变量的值,配置文件内可能有很多的数值,数据并不是固定的行

masterlong 发表于 2022-5-15 16:42:06

你可以在上面范例的基础上
再尝试下面的做法
biao1去掉子表里的【双引号】写出
biao2作如下处理
(foreach x biao2
   (set (car x) (cadr x))
)

yu960312 发表于 2022-5-15 19:35:23

masterlong 发表于 2022-5-15 16:42
你可以在上面范例的基础上
再尝试下面的做法
biao1去掉子表里的【双引号】写出


好的,谢谢大哥指点,学习了

yu960312 发表于 2022-5-16 20:47:42

有没有大神帮忙解决一下,自己搞了半天老是不对

vectra 发表于 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表,然后就可以愉快的操作了

刚看了下 和“地板”的代码思路是一致的

masterlong 发表于 2022-5-16 22:17:21

我这源码都贴了
另一种方法也讲了
还搞不定?

vectra 发表于 2022-5-16 22:25:55

masterlong 发表于 2022-5-16 22:17
我这源码都贴了
另一种方法也讲了
还搞不定?

也许楼主不能接受lsp文件格式保存;P
页: [1] 2
查看完整版本: 配置文件内容读取