明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2025|回复: 13

【INI】解析配置文件

[复制链接]
发表于 2023-3-14 01:16:27 | 显示全部楼层 |阅读模式
本帖最后由 kucha007 于 2023-3-14 01:44 编辑

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

;配置文件内部是这样的,第一个分号后面的是注释,前面的是值。更新也是这个逻辑。

  1. 1;PlotStyle
  2. 0;PaperSize
  3. 0;PrintName
复制代码

相关的三个函数:
  1. ;串联用分隔符字符串@LeeMac
  2. (defun K:Lst2Str (Lst Del / itm str)
  3.   (setq str (car Lst))
  4.   (foreach itm (cdr Lst)
  5.     (setq str (strcat str del itm))
  6.   )
  7.   str
  8. )
  9. ;新建配置文件并获取数据
  10. (defun K:ReadPtVar (FPath / Lst FName des lin)
  11.   (setq Lst '())
  12.   (if (not (setq FName (findfile FPath)));文件不存在
  13.     (progn
  14.       (setq des (open FPath "w"))
  15.       (princ
  16.         (K:Lst2Str '("1;PrintName" "0;PaperSize" "0;PlotStyle") "\n")
  17.         des
  18.       )
  19.       (close des)
  20.     )
  21.   )
  22.   (if (setq FName (findfile FPath))
  23.     (progn
  24.       (setq des (open FName "r"))
  25.       (while (setq lin (read-line des))
  26.         (setq lin (substr lin 1 (vl-string-position (ascii ";") lin)))
  27.         (setq Lst (cons lin Lst))
  28.       )
  29.       (close des)
  30.     )
  31.   )
  32.   (reverse Lst)
  33. )
  34. ;将最新的设置记录到配置文件
  35. (defun K:RecordPtVar (FPath NewLst / NewData FName des Nam lin)
  36.   (setq NewData '())
  37.   (if (setq FName (findfile FPath));文件存在
  38.     (progn
  39.       (setq des (open FName "r"))
  40.       (setq Nam 0)
  41.       (while (setq lin (read-line des))
  42.         (setq lin (strcat
  43.                     (nth Nam (reverse NewLst))
  44.                     (substr lin (1+ (vl-string-position (ascii ";") lin)))
  45.                   )
  46.         )
  47.         (setq NewData (cons lin NewData))
  48.         (setq Nam (1+ Nam))
  49.       )
  50.       (close des)
  51.       (setq des (open FPath "w"))
  52.       (princ (K:Lst2Str NewData "\n") des)
  53.       (close des)
  54.     )
  55.   )
  56. )

发表于 2023-10-9 06:17:42 | 显示全部楼层
dcl1214 发表于 2023-3-15 14:48
ini的配置文件如果很多,或者是很大,当用户修改界面上的勾选项或者是默认项的时候,每次修改ini速度是很慢 ...

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

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

感谢回复,目前用的比较简单,只是几个参数而已。
你说的数据库蛮有意思,不过我不会,请教一下那里可以找到案例吗?有时间学习一下
发表于 2023-3-14 07:15:38 | 显示全部楼层
为啥要解析ini文件,直接把list转成字符串然后打印到文件不香吗,直接用assoc和subst就可以实现查找和替换
 楼主| 发表于 2023-3-14 08:32:05 | 显示全部楼层
本帖最后由 kucha007 于 2023-3-14 08:33 编辑
fangmin723 发表于 2023-3-14 07:15
为啥要解析ini文件,直接把list转成字符串然后打印到文件不香吗,直接用assoc和subst就可以实现查找和替换

现在就是这样的啊
发表于 2023-3-14 09:21:54 | 显示全部楼层
.ini 文件是有专门格式的。由多个节点 node 和 关键字 值 组成。
当然 你自用的话,怎么定义格式都无所谓。

[node]
keyid = value # 说明
# 注释说明

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

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

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

明白,直接改txt
发表于 2023-3-15 14:48:03 | 显示全部楼层
ini的配置文件如果很多,或者是很大,当用户修改界面上的勾选项或者是默认项的时候,每次修改ini速度是很慢的,建议改成数据库模式读取,一个20M的ini文件,修改其中一个小小的地方,只需要0.001秒
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 05:51 , Processed in 0.186090 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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