[Shell] 纯文本查看 复制代码
.版本 2
.支持库 spec
.程序集 窗口程序集_启动窗口
.程序集变量 打卡数据, 文本型, , "0"
.程序集变量 日期表, 文本型, , "0"
.程序集变量 时段定义, 打卡时段, , "4" ' 定义四个时段
.数据类型 打卡时段
.成员 时段名称, 文本型
.成员 开始小时, 整数型
.成员 结束小时, 整数型
.子程序 __启动窗口_创建完毕
初始化时段定义 ()
加载打卡数据 ()
分析漏打卡情况 ()
.子程序 初始化时段定义
' 定义四个打卡时段范围
时段定义 [1].时段名称 = "上午上班"
时段定义 [1].开始小时 = 8
时段定义 [1].结束小时 = 9
时段定义 [2].时段名称 = "上午下班"
时段定义 [2].开始小时 = 11
时段定义 [2].结束小时 = 12
时段定义 [3].时段名称 = "下午上班"
时段定义 [3].开始小时 = 14
时段定义 [3].结束小时 = 15
时段定义 [4].时段名称 = "下午下班"
时段定义 [4].开始小时 = 17
时段定义 [4].结束小时 = 18
.子程序 加载打卡数据
' 原始数据(可从文件读取)
打卡数据 = {
"2024-06-03 08:41:03",
"2024-06-03 11:10:10",
"2024-06-03 14:43:12",
"2024-06-03 17:11:10",
"2024-06-04 08:36:45",
"2024-06-04 14:29:50",
"2024-06-04 17:07:15",
"2024-06-05 08:40:17",
"2024-06-05 11:22:12",
"2024-06-05 14:23:58",
"2024-06-05 17:21:54",
"2024-06-06 08:07:10",
"2024-06-07 08:42:28",
"2024-06-07 11:20:45",
"2024-06-07 14:31:51"
}
.子程序 分析漏打卡情况
.局部变量 当前日期, 文本型
.局部变量 日期时段表, 文本型, , "0"
.局部变量 i, 整数型
.局部变量 j, 整数型
.局部变量 时间戳, 文本型
.局部变量 日期, 文本型
.局部变量 小时, 整数型
.局部变量 分钟, 整数型
' 按日期分组
.计次循环首 (取数组成员数 (打卡数据), i)
时间戳 = 打卡数据
日期 = 取文本左边 (时间戳, 10)
小时 = 到整数 (取文本中间 (时间戳, 12, 2))
分钟 = 到整数 (取文本中间 (时间戳, 15, 2))
' 记录日期
.如果真 (查找文本数组 (日期表, 日期) = 0)
加入成员 (日期表, 日期)
.如果真结束
' 匹配时段
.计次循环首 (4, j)
.如果真 (小时 ≥ 时段定义 [j].开始小时 且 小时 ≤ 时段定义 [j].结束小时)
加入成员 (日期时段表, 日期 + "|" + 时段定义 [j].时段名称)
跳出循环 ()
.如果真结束
.计次循环尾 ()
.计次循环尾 ()
' 检查每个日期的四个时段是否完整
.计次循环首 (取数组成员数 (日期表), i)
当前日期 = 日期表
.局部变量 缺失时段, 文本型
缺失时段 = ""
.计次循环首 (4, j)
.如果真 (查找文本数组 (日期时段表, 当前日期 + "|" + 时段定义 [j].时段名称) = 0)
缺失时段 = 缺失时段 + 时段定义 [j].时段名称 + " "
.如果真结束
.计次循环尾 ()
.如果真 (缺失时段 ≠ "")
调试输出 (当前日期, "漏打卡时段:" + 缺失时段)
.如果真结束
.计次循环尾 ()
.子程序 查找文本数组, 整数型
.参数 数组, 文本型, 数组
.参数 查找内容, 文本型
.局部变量 i, 整数型
.计次循环首 (取数组成员数 (数组), i)
.如果真 (数组 = 查找内容)
返回 (i)
.如果真结束
.计次循环尾 ()
返回 (0)