kucha007 发表于 2023-3-14 01:16:27

【INI】解析配置文件

本帖最后由 kucha007 于 2023-3-14 01:44 编辑

不保证通用性,只是自己的程序需要:http://bbs.mjtd.com/thread-187339-1-1.html

;配置文件内部是这样的,第一个分号后面的是注释,前面的是值。更新也是这个逻辑。
1;PlotStyle
0;PaperSize
0;PrintName
相关的三个函数:
;串联用分隔符字符串@LeeMac
(defun K:Lst2Str (Lst Del / itm str)
(setq str (car Lst))
(foreach itm (cdr Lst)
    (setq str (strcat str del itm))
)
str
)
;新建配置文件并获取数据
(defun K:ReadPtVar (FPath / Lst FName des lin)
(setq Lst '())
(if (not (setq FName (findfile FPath)));文件不存在
    (progn
      (setq des (open FPath "w"))
      (princ
      (K:Lst2Str '("1;PrintName" "0;PaperSize" "0;PlotStyle") "\n")
      des
      )
      (close des)
    )
)
(if (setq FName (findfile FPath))
    (progn
      (setq des (open FName "r"))
      (while (setq lin (read-line des))
      (setq lin (substr lin 1 (vl-string-position (ascii ";") lin)))
      (setq Lst (cons lin Lst))
      )
      (close des)
    )
)
(reverse Lst)
)
;将最新的设置记录到配置文件
(defun K:RecordPtVar (FPath NewLst / NewData FName des Nam lin)
(setq NewData '())
(if (setq FName (findfile FPath));文件存在
    (progn
      (setq des (open FName "r"))
      (setq Nam 0)
      (while (setq lin (read-line des))
      (setq lin (strcat
                  (nth Nam (reverse NewLst))
                  (substr lin (1+ (vl-string-position (ascii ";") lin)))
                  )
      )
      (setq NewData (cons lin NewData))
      (setq Nam (1+ Nam))
      )
      (close des)
      (setq des (open FPath "w"))
      (princ (K:Lst2Str NewData "\n") des)
      (close des)
    )
)
)

yu960312 发表于 2023-10-9 06:17:42

dcl1214 发表于 2023-3-15 14:48
ini的配置文件如果很多,或者是很大,当用户修改界面上的勾选项或者是默认项的时候,每次修改ini速度是很慢 ...

大佬,最近正在寻找用数据库代替ini配置文件的资料,能不能写一个示例程序
1 . 创建数据库
2 . 链接数据库
3 . 查询数据库指定项的值
4 . 修改数据库指定项的值
5 . 新增数据库指定项

dcl1214 发表于 2023-10-9 14:04:26

本帖最后由 dcl1214 于 2023-10-9 14:06 编辑

yu960312 发表于 2023-10-9 06:17
大佬,最近正在寻找用数据库代替ini配置文件的资料,能不能写一个示例程序
1 . 创建数据库
2 . 链接数 ...
针对数据库我做过直播的,同时也在明经发布了很多示例,明经群里很多人在用我分享的exe


【金山文档】 数据库DBO接口函数说明
https://kdocs.cn/l/cnRzPSRIaCJ9

kucha007 发表于 2023-3-15 15:49:42

dcl1214 发表于 2023-3-15 14:48
ini的配置文件如果很多,或者是很大,当用户修改界面上的勾选项或者是默认项的时候,每次修改ini速度是很慢 ...

感谢回复,目前用的比较简单,只是几个参数而已。
你说的数据库蛮有意思,不过我不会,请教一下那里可以找到案例吗?有时间学习一下

fangmin723 发表于 2023-3-14 07:15:38

为啥要解析ini文件,直接把list转成字符串然后打印到文件不香吗,直接用assoc和subst就可以实现查找和替换

kucha007 发表于 2023-3-14 08:32:05

本帖最后由 kucha007 于 2023-3-14 08:33 编辑

fangmin723 发表于 2023-3-14 07:15
为啥要解析ini文件,直接把list转成字符串然后打印到文件不香吗,直接用assoc和subst就可以实现查找和替换
现在就是这样的啊

vitalgg 发表于 2023-3-14 09:21:54

.ini 文件是有专门格式的。由多个节点 node 和 关键字 值 组成。
当然 你自用的话,怎么定义格式都无所谓。


keyid = value # 说明
# 注释说明

kucha007 发表于 2023-3-14 09:24:40

vitalgg 发表于 2023-3-14 09:21
.ini 文件是有专门格式的。由多个节点 node 和 关键字 值 组成。
当然 你自用的话,怎么定义格式都无所谓 ...

感谢回复,有看到你的帖子。自用的话只是需要有一个文件储存信息,所以不需要太复杂

d1742647821 发表于 2023-3-14 10:50:13

kucha007 发表于 2023-3-14 09:24
感谢回复,有看到你的帖子。自用的话只是需要有一个文件储存信息,所以不需要太复杂

主要是你这ini文件不满足通用的ini文件格式标准,建议自己起个后缀名

kucha007 发表于 2023-3-14 10:54:50

d1742647821 发表于 2023-3-14 10:50
主要是你这ini文件不满足通用的ini文件格式标准,建议自己起个后缀名

明白,直接改txt

hzyhzjjzh 发表于 2023-3-14 12:31:57

谢谢分享{:1_1:}

dcl1214 发表于 2023-3-15 14:48:03

ini的配置文件如果很多,或者是很大,当用户修改界面上的勾选项或者是默认项的时候,每次修改ini速度是很慢的,建议改成数据库模式读取,一个20M的ini文件,修改其中一个小小的地方,只需要0.001秒
页: [1] 2
查看完整版本: 【INI】解析配置文件