.版本 2
.支持库 iext
.支持库 EThread
.程序集 窗口程序集_启动窗口
.程序集变量 许可证, 线程许可证
.程序集变量 结果文件号, 整数型
.程序集变量 线程数, 整数型
.程序集变量 停止标志, 逻辑型
.程序集变量 目录队列, 文本型, , "0"
.程序集变量 最大线程数, 整数型
.程序集变量 队列许可证, 线程许可证
.程序集变量 文件写入锁, 线程许可证
.程序集变量 UI更新许可证, 线程许可证, , , ; 新增UI更新锁
.程序集变量 文件路径, 文本型
.程序集变量 工作线程数, 整数型
.子程序 __启动窗口_创建完毕
花名花见.皮肤加载 (6, , , , , )
通用对话框_保存.初始目录 = 编辑框_目录.内容
最大线程数 = 4 ' 根据CPU核心数设置合适值
清除数组 (目录队列) ' 初始化目录队列
许可证 = 线程_创建许可证 ()
队列许可证 = 线程_创建许可证 ()
文件写入锁 = 线程_创建许可证 ()
UI更新许可证 = 线程_创建许可证 () ' 创建UI更新锁
结果文件号 = 打开文件 (“文件列表.txt”, #重写, )
关闭文件 (结果文件号)
停止标志 = 假
编辑框_目录.内容 = 到文本 (读入文件 (取运行目录 () + “\地址.ini”))
超级列表框_数据显示.始终显示选择项 = 真
最大线程数 = 5
' 初始化线程池
.计次循环首 (最大线程数, )
启动线程 (&目录扫描线程, , )
.计次循环尾 ()
.子程序 _按钮_查找文件_被单击
.局部变量 初始目录, 文本型
.局部变量 文本, 文本型
文本 = 文本_删除空行 (编辑框_过滤器.内容)
.如果真 (文本 = “”)
信息框 (“未输入需要查找的文件名!”, 0, , )
返回 ()
.如果真结束
' 在主线程直接更新UI
标签_搜索完成.文本颜色 = #红色
标签_搜索完成.标题 = “文件枚举中,请稍等》》》》”
列表框1.清空 ()
初始目录 = 编辑框_目录.内容
.如果真 (目录_是否存在 (初始目录) = 假)
信息框 (“目录不存在!”, 0, , )
返回 ()
.如果真结束
停止标志 = 假
列表框1.清空 ()
' 初始化目录队列
清除数组 (目录队列)
加入成员 (目录队列, 初始目录)
' 启动多个工作线程
.计次循环首 (最大线程数, )
启动线程 (&目录扫描线程, , )
.计次循环尾 ()
.子程序 目录扫描线程
.局部变量 文件数组, 文本型, , "0"
.局部变量 子目录数组, 文本型, , "0"
.局部变量 当前目录, 文本型
.局部变量 i, 整数型
.判断循环首 (取反 (停止标志))
线程_进入许可区 (许可证)
.如果 (取数组成员数 (目录队列) > 0)
当前目录 = 目录队列 [1]
删除成员 (目录队列, 1, 1) ' 从队列头部取出目录
工作线程数 = 工作线程数 + 1
.否则
当前目录 = “”
.如果结束
线程_退出许可区 (许可证)
.如果真 (当前目录 = “”)
程序_延时 (100) ' 队列空时短暂休眠
到循环尾 ()
.如果真结束
' 扫描当前目录的文件
文件_枚举 (当前目录, 编辑框_过滤器.内容 + “.txt”, 文件数组, 真, 假, 真)
.计次循环首 (取数组成员数 (文件数组), i)
.如果真 (停止标志)
跳出循环 ()
.如果真结束
保存结果 (文件数组 [i])
列表框1.加入项目 (文件数组 [i], )
.计次循环尾 ()
' 枚举子目录并加入队列
目录_枚举子目录 (当前目录, 子目录数组, 假)
线程_进入许可区 (许可证)
.计次循环首 (取数组成员数 (子目录数组), i)
加入成员 (目录队列, 子目录数组 [i]) ' 添加到队列尾部
.计次循环尾 ()
工作线程数 = 工作线程数 - 1
.如果 (取数组成员数 (目录队列) = 0 且 工作线程数 = 0)
标签_搜索完成.文本颜色 = #绿色
标签_搜索完成.标题 = “扫描完成!”
.否则
标签_搜索完成.标题 = “正在扫描,剩余目录:” + 到文本 (取数组成员数 (目录队列))
.如果结束
线程_退出许可区 (许可证)
.判断循环尾 ()
.子程序 保存结果
.参数 文件路径, 文本型
.局部变量 临时内容, 文本型
临时内容 = 文件路径 + #换行符
线程_进入许可区 (文件写入锁)
结果文件号 = 打开文件 (“文件列表.txt”, #改写, )
移到文件尾 (结果文件号)
写出文本 (结果文件号, 临时内容)
关闭文件 (结果文件号)
线程_退出许可区 (文件写入锁)
.子程序 _按钮_停止_被单击
停止标志 = 真
.子程序 __启动窗口_将被销毁
停止标志 = 真
.判断循环首 (线程数 > 0) ' 等待所有线程退出
程序_延时 (100)
.判断循环尾 ()
线程_删除许可证 (许可证)
写到文件 (取运行目录 () + “\地址.ini”, 到字节集 (编辑框_目录.内容))
.子程序 _编辑框_过滤器_放开某键, 逻辑型
.参数 键代码, 整数型
.参数 功能键状态, 整数型
.如果真 (键代码 = #回车键)
_按钮_查找文件_被单击 ()
.如果真结束
.子程序 _列表框1_列表项被选择
.局部变量 文件内容, 文本型
.局部变量 文件号, 整数型
.局部变量 行数组, 文本型, , "0"
.局部变量 列数组, 文本型, , "0"
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 A, 整数型
超级列表框_数据显示.全部删除 ()
' 确定需要加入的位置
' 文件路径 = 列表框1.取项目文本 (列表框1.现行选中项)
文件号 = 打开文件 (文件路径, , )
文件内容 = 读入文本 (文件号, )
列数组 = 分割文本 (文件内容, #换行符, )
关闭文件 (文件号)
' 导入每列数据
.计次循环首 (取数组成员数 (列数组), i)
A = 超级列表框_数据显示.插入表项 (, 到文本 (超级列表框_数据显示.取表项数 () + 1), , , , )
' 应在循环内对每一行列进行分割
.如果真 (取文本长度 (列数组 [i]) > 0)
行数组 = 分割文本 (列数组 [i], “|”, ) ' ? 每行独立分割
.计次循环首 (取数组成员数 (行数组), j)
超级列表框_数据显示.置标题 (A, j, 行数组 [j])
.计次循环尾 ()
.如果真结束
.计次循环尾 ()
.子程序 _超级列表框_数据显示_被双击, 逻辑型
.参数 横向位置, 整数型
.参数 纵向位置, 整数型
.参数 功能键状态, 整数型
.局部变量 行索引, 整数型
.局部变量 客户名称, 文本型
.局部变量 颜色, 文本型
.局部变量 数量, 文本型
.局部变量 电压, 文本型
.局部变量 电流, 文本型
.局部变量 老化, 文本型
.局部变量 全检, 文本型
.局部变量 备注, 文本型
' 获取当前被双击的行索引(从1开始)
行索引 = 超级列表框_数据显示.现行选中项
.如果真 (行索引 ≠ -1)
' 获取该行第一列的内容(可根据需要改为其他列)
客户名称 = 超级列表框_数据显示.取标题 (行索引, 1)
颜色 = 超级列表框_数据显示.取标题 (行索引, 2)
数量 = 超级列表框_数据显示.取标题 (行索引, 3)
电压 = 超级列表框_数据显示.取标题 (行索引, 4)
电流 = 超级列表框_数据显示.取标题 (行索引, 5)
老化 = 超级列表框_数据显示.取标题 (行索引, 6)
全检 = 超级列表框_数据显示.取标题 (行索引, 7)
备注 = 超级列表框_数据显示.取标题 (行索引, 8)
编辑框_客户名称.内容 = 客户名称
编辑框_颜色.内容 = 颜色
编辑框_数量.内容 = 数量
编辑框_电流.内容 = 电流
.判断开始 (老化 = “是”)
组合框_老化.现行选中项 = 0
.判断 (老化 = “否”)
组合框_老化.现行选中项 = 1
.默认
.判断结束
.判断开始 (电压 = “24”)
组合框_电压.现行选中项 = 0
.判断 (电压 = “12”)
组合框_电压.现行选中项 = 1
.判断 (电压 = “48”)
组合框_电压.现行选中项 = 2
.判断 (电压 = “5”)
组合框_电压.现行选中项 = 3
.判断 (电压 = “ 3”)
组合框_电压.现行选中项 = 4
.默认
.判断结束
.判断开始 (全检 = “否”)
组合框_全检.现行选中项 = 0
.判断 (全检 = “是”)
组合框_全检.现行选中项 = 1
.默认
.判断结束
编辑框_备注.内容 = 备注
.如果真结束
.子程序 _按钮_加入数据_被单击
.局部变量 a, 整数型
' 在最后一行插入新的条目
.如果 (编辑框_客户名称.内容 ≠ “” 且 编辑框_颜色.内容 ≠ “” 且 编辑框_数量.内容 ≠ “” 且 编辑框_电流.内容 ≠ “”)
a = 超级列表框_数据显示.插入表项 (, 到文本 (超级列表框_数据显示.取表项数 () + 1), , , , )
超级列表框_数据显示.置标题 (a, 1, 文本_删首尾空 (编辑框_客户名称.内容))
超级列表框_数据显示.置标题 (a, 2, 文本_删首尾空 (到大写 (编辑框_颜色.内容)))
超级列表框_数据显示.置标题 (a, 3, 文本_删首尾空 (编辑框_数量.内容))
.判断开始 (组合框_电压.现行选中项 = 0)
超级列表框_数据显示.置标题 (a, 4, “24”)
.判断 (组合框_电压.现行选中项 = 0)
超级列表框_数据显示.置标题 (a, 4, “12”)
.判断 (组合框_电压.现行选中项 = 0)
超级列表框_数据显示.置标题 (a, 4, “48”)
.判断 (组合框_电压.现行选中项 = 0)
超级列表框_数据显示.置标题 (a, 4, “5”)
.判断 (组合框_电压.现行选中项 = 0)
超级列表框_数据显示.置标题 (a, 4, “3”)
.默认
.判断结束
超级列表框_数据显示.置标题 (a, 5, 文本_删首尾空 (编辑框_电流.内容))
.判断开始 (组合框_老化.现行选中项 = 0)
超级列表框_数据显示.置标题 (a, 6, “是”)
.默认
组合框_老化.现行选中项 = 1
超级列表框_数据显示.置标题 (a, 6, “否”)
.判断结束
.判断开始 (组合框_全检.现行选中项 = 0)
超级列表框_数据显示.置标题 (a, 7, “否”)
.默认
组合框_老化.现行选中项 = 1
超级列表框_数据显示.置标题 (a, 7, “是”)
.判断结束
超级列表框_数据显示.置标题 (a, 8, 文本_删首尾空 (编辑框_备注.内容))
超级列表框_数据显示.置标题 (a, 9, 到文本 (取年份 (取现行时间 ())) + “年” + 到文本 (取月份 (取现行时间 ())) + “月” + 到文本 (取日 (取现行时间 ())) + “日”)
.否则
信息框 (“输入错误!”, 0, , )
.如果结束
编辑框_客户名称.内容 = “”
编辑框_备注.内容 = “”
.子程序 _按钮_删除文件_被单击
.局部变量 行索引, 整数型
.局部变量 被选中的行数组, 整数型, , "0"
被选中的行数组 = 超级列表框_数据显示.取被选择表项 ()
.如果真 (取数组成员数 (被选中的行数组) > 0)
行索引 = 被选中的行数组 [1] ' 获取第一个被选中的行索引
超级列表框_数据显示.删除表项 (行索引)
.如果真结束
.子程序 _按钮_保存文件_被单击
.局部变量 保存到的路径, 文本型
.局部变量 对话框结果, 逻辑型
.如果真 (超级列表框_数据显示.取表项数 () = 0)
信息框 (“没有需要保存的内容!”, 0, , )
返回 ()
.如果真结束
' 若当前已有文件路径,则提取目录部分作为初始目录
.如果真 (取反 (文件路径 = “”))
保存到的路径 = 文本_取左边 (文件路径, “\”, -1, )
通用对话框_保存.初始目录 = 保存到的路径
通用对话框_保存.文件名 = 编辑框_过滤器.内容
.如果真结束
' 设置保存对话框属性
通用对话框_保存.类型 = 1 ' 1 表示保存文件
通用对话框_保存.过滤器 = “文本文件(*.txt)|*.txt”
' 通用对话框_保存.默认扩展名 = “txt”
' 显示对话框
对话框结果 = 通用对话框_保存.打开 ()
.如果真 (对话框结果)
' 用户点击“保存”后执行保存操作
文件路径 = 通用对话框_保存.文件名 ' 更新全局路径
超级列表框_保存到文件 (文件路径, 假) ' 假:覆盖写入
' 信息框 (“文件已成功保存!”, 0, , )
.如果真结束
.子程序 超级列表框_保存到文件
.参数 目标路径, 文本型
.参数 是否追加, 逻辑型
.局部变量 文件号, 整数型
.局部变量 行索引, 整数型
.局部变量 列索引, 整数型
.局部变量 当前行文本, 文本型
' 打开文件(追加或新建)
.如果 (是否追加)
文件号 = 打开文件 (目标路径, #改写, ) ' 覆盖模式
.否则
文件号 = 打开文件 (目标路径, #重写, ) ' 创建模式
.如果结束
.如果真 (文件号 = 0)
信息框 (“文件创建失败!”, 0, , )
返回 ()
.如果真结束
' 写入数据行
.计次循环首 (超级列表框_数据显示.取表项数 (), 行索引)
当前行文本 = “”
.计次循环首 (超级列表框_数据显示.取列数 (), 列索引)
当前行文本 = 当前行文本 + 超级列表框_数据显示.取标题 (行索引 - 1, 列索引) + “|”
.计次循环尾 ()
写文本行 (文件号, 当前行文本)
.计次循环尾 ()
关闭文件 (文件号)
最新发布