本帖最后由 王之能够21wz 于 2026-8-1 19:48 编辑
易语言 配置文件编辑器(Qini)程序分析报告 千问AI生成程序核心功能
该程序是一款专为配置文件(特别是类INI格式)设计的可视化编辑工具,具备以下核心功能模块:
文件读取与加载
• 支持两种方式加载文件:
• 通过“读取文件”按钮触发通用对话框选择文件
• 支持拖放操作直接将文件拖入窗口
• 加载后自动记录文件路径至编辑框位置 . 内容
• 使用读入文件 () 函数获取原始字节集
编码识别与转换
• 调用文件 _ 取文本编码 () 判断文件编码类型
• 根据返回值进行相应解码:
• 值为1:视为UTF-8编码,使用编码 _Utf8 到 Ansi 转换
• 值为2:视为Unicode编码,使用编码 _Unicode 到 Ansi 转换
• 其他情况:直接转为文本显示
• 确保不同编码的配置文件均可正确显示中文内容
配置项管理
功能
实现方式
读取节名
文件 _ 取配置节名数组 ( 文件路径 , 节名数组 )
读取项名
文件 _ 取配置项名数组 ( 文件路径 , 节名 , 项名数组 )
修改值
写配置项 ( 文件路径 , 节 , 项 , 值 )
修改节名
在当前节范围内查找 [ 旧节名 并替换
修改项名
在目标节内查找 旧项 = 并替换为 新项 =
文件保存与导出
• 即时保存 :点击“修改值”、“修改节”、“修改项”按钮后立即写回原文件
• 另存为 :通过“另存”按钮打开保存对话框,支持自定义路径
• 另暂存 :生成临时文件并用资源管理器选中显示
MD5 校验与变更监控
• 初始加载时计算文件MD5值并存储于全局变量MD5
• 通过时钟 1 周期性(100ms)检查当前文件MD5
• 若发现不一致,则弹出提示询问是否重新读取
• 用户可勾选“选择框.选中”实现自动重载
任务执行工作流
完整用户操作流程
graph TD
A[启动程序] --> B{创建窗口完毕}
B --> C[注册拖放控件]
C --> D[等待用户输入]
D --> E1[拖放文件 或 ]
D --> E2[点击读取按钮]
E1 & E2 --> F[调用 _拖放对象1_得到文件]
F --> G[读取文件路径]
G --> H[计算初始MD5]
H --> I[识别编码并转换显示]
I --> J[展示内容于编辑框]
J --> K[启用时钟监控外部变更]
K --> L[用户编辑内容]
L --> M{触发修改动作?}
M -->|是| N[执行对应修改子程序]
N --> O[写回文件]
O --> P[刷新界面]
M -->|否| Q[持续监控]
数据处理流程
1. 输入阶段 :
- 获取文件路径 → 读取原始字节集 → 判断编码类型 → 解码为ANSI文本
2. 显示阶段 :
- 将解码后文本填充至编辑框内容- 记录初始MD5值用于后续比对
3. 交互阶段 :
- 用户点击内容区域 → 触发选取位置()定位当前节/项/值
- 用户修改 → 提交更改 → 写入磁盘 → 重新加载以保持一致性
4. 输出阶段 :
- 支持三种输出模式:原地保存、另存为、临时保存查看
模块结构分析
程序集与变量结构
类型
名称
说明
程序集
窗口程序集_启动窗口
主界面逻辑容器
全局变量
MD5
存储当前文件的MD5校验值
局部变量
k, i, h等
用于循环、状态判断、临时存储
子程序清单及功能描述
编号
子程序名称
参数
功能描述
1
_ 按钮 _ 读取文件 _ 被单击
无
打开文件对话框并加载选定文件
2
__ 启动窗口 _ 创建完毕
无
初始化拖放功能
3
_ 拖放对象 1_ 得到文件
接收到的文件路径
核心加载入口,处理编码转换与显示
4
_ 时钟 1_ 周期事件
无
监控外部文件变更并提示同步
5
_ 按钮 _ 修改值 _ 被单击
无
更新指定配置项的值
6
_ 编辑框内容 _ 鼠标左键被按下
位置参数
触发光标所在行的节/项/值提取
7
选取位置
无
解析当前光标所在行的配置结构
8
取位置对应行号
源文本, 字符位置
将编辑框中的字符偏移转换为行号
9
取字符数
文本
计算包含中文的文本实际字符数(非字节数)
10
_ 按钮 _ 修改节 _ 被单击
无
修改当前节名称
11
_ 按钮 _ 修改项 _ 被单击
无
修改当前项名称
12
_ 编辑框节 _ 调节钮被按下
按钮值
在节名列表中上下切换
13
_ 编辑框项 _ 调节钮被按下
按钮值
在项名列表中上下切换
14
_ 按钮 _ 另暂存 _ 被单击
无
将当前内容保存至临时文件并选中显示
15
_ 按钮 _ 另存 _ 被单击
无
另存为新文件
模块调用关系
• _ 拖放对象 1_ 得到文件 是核心枢纽,被多个子程序调用:
• _ 按钮 _ 读取文件 _ 被单击
• _ 时钟 1_ 周期事件 (条件触发)
• _ 按钮 _ 修改值 _ 被单击
• _ 按钮 _ 修改节 _ 被单击
• _ 按钮 _ 修改项 _ 被单击
• 选取位置 () 被_ 编辑框内容 _ 鼠标左键被按下 和其他修改操作间接调用
• 文件 _ 取配置节名数组 和文件 _ 取配置项名数组 被调节钮事件调用以实现导航
精益模块实现细节
程序引用了典型的“精益模块”设计思想,主要体现在对配置文件结构化访问的支持上。
引用的精益模块函数
函数名
调用位置
作用
文件 _ 取配置节名数组
_ 编辑框节 _ 调节钮被按下
获取所有节名用于上下切换导航
文件 _ 取配置项名数组
_ 编辑框项 _ 调节钮被按下
获取当前节下所有项名用于切换
在任务规划中的作用
• 提升用户体验 :允许用户通过调节钮快速在节/项之间跳转,无需手动输入
• 增强程序健壮性 :避免因手动输入错误导致找不到配置项的问题
• 实现智能感知 :结合当前编辑位置自动填充建议值
• 降低开发复杂度 :复用成熟模块,避免重复编写解析逻辑
技术协作机制
• 这些函数虽然未在当前源码中实现,但从调用方式可知其接口设计清晰:easylanguage
文件_取配置节名数组(文件路径, 输出数组)
文件_取配置项名数组(文件路径, 节名, 输出数组)
• 输出参数采用传引用方式填充结果数组,符合易语言常见编程范式
• 与主程序形成松耦合结构,便于后期维护升级
程序特点与优势
特色功能
特性
描述
多编码兼容
支持GBK、UTF-8、Unicode等多种编码格式自动识别
实时外部监控
利用MD5校验实现文件外部变更检测
结构化编辑
将平面文本转化为节→项→值三级结构进行操作
拖放友好
支持文件拖拽加载,提升操作效率
临时快照
“另暂存”功能便于调试与分享当前状态
用户体验设计
• 智能定位 :点击任意配置行,自动解析并填充节/项/值到对应输入框
• 双向联动 :修改输入框内容可反向影响文本区,反之亦然
• 快捷导航 :通过调节钮实现节/项的快速遍历
• 视觉反馈 :标签md5实时显示当前校验值,增强可信度
错误处理机制
• 文件写入失败时弹出明确错误提示:“写入失败”或“另存失败”
• 对空值或无效操作进行前置判断(如节名为空时不执行修改)
• 使用如果真 ( 条件 ) 结构进行安全判断,防止异常中断
• 临时文件操作失败时提示具体路径,便于排查问题
技术实现要点
编码处理机制
• 使用文件 _ 取文本编码 () 判断原始编码类型
• 针对不同编码调用专用转换函数:
• UTF-8 → ANSI:编码 _Utf8 到 Ansi
• Unicode → ANSI:编码 _Unicode 到 Ansi
• 最终统一以ANSI形式显示,保证编辑框兼容性
文件操作策略
• 读取:读入文件 () 一次性加载整个文件
• 写入:写到文件 ( 路径 , 到字节集 ( 文本 )) 将ANSI文本重新编码为字节集写入
• 临时文件:取临时文件名 () 生成唯一路径,配合explorer /select 实现可视化定位
MD5 校验实现
• 利用校验 _ 取 md5( 数据 , 是否转为十六进制 , ) 函数
• 数据来源:读入文件 ( 编辑框位置 . 内容 )
• 十六进制输出:第二个参数为真
• 存储位置:全局变量MD5 保存初始值,标签 md5. 标题 显示实时值
配置项解析算法
• 节名识别 :正则匹配^[.*]$ 格式的行
• 项值提取 :寻找第一个= 符号分割键值
• 作用域控制 :修改项名时限定在当前节范围内查找
• 精确替换 :仅替换行首的项名,保留等号后的值部分
文本定位与计数
• 取位置对应行号 () 函数实现字符位置到行号的映射:
• 分割文本为行数组
• 累加每行长度(含换行符占2字节)
• 定位首次超过给定字符位置的行
• 取字符数 () 自定义函数解决中文计数问题:
• 遍历字节集,>127视为双字节字符(GBK)
• 单字符计数+1,无论单双字节
• 解决了易语言默认取文本长度 () 返回字节数的问题因控件问题,需要2次点击选中才可正常使用,该缺陷无实际影响正常使用。
回复可见源码
补充内容 (2026-8-2 20:44):
新增:自动切换保存编码、添加新节、添加新项、添加新值、配置文件合并
以下是新 读写配置源码,
https://qeaget.lanzout.com/ixiAn407e03e
密码:qini
补充内容 (2026-8-2 20:46):
以下是编译好的成品储存地 (exe)
https://qeaget.lanzout.com/b00rp5eopc
密码:qini