|
目的:处理游戏日志文本,提取出指定项目(时间、SteamID、昵称/编号、命令描述、命令文本)
日志文本示例:(仅展示了部分典型文本结构,还可能有其他文本结构,但是开头的日期是肯定有的,我在代码中已经做了处理,如正则匹配不到则只取时间和时间后面的文本)
2024.10.02-11.02.37: Game version: 0.9.543.81099
2024.10.02-11.04.40: '76561199125779714:精致生活服务员(1)' Command: 'listplayers true'
2024.10.02-11.04.51: '76561199125779714:精致生活服务员(1)' Command: 'ListSpawnedVehicles true'
2024.10.02-11.29.32: '76561198853518897:Dannmo(10)' Used map click teleport to player: '76561199770495755:3446924117(136)' Location: X=350994.000 Y=-517909.000 Z=8095.310
2024.10.14-14.20.21: Custom Zones updated by {小小 (9, 76561198397844696)}
存在问题的代码片段:
开始事务 (局_数据库句柄 )临时数值 = 到整数 (时间_到时间戳 (取现行时间 (), 假, )) 计次循环首 (取数组成员数 (局_文本数组 ), 局_计次3 )如果真 (到整数 (局_文本数组 [局_计次3 ]) ≠ 0 且 文本_寻找文本 (局_文本数组 [局_计次3 ], “: Game version: ”, , 假) = -1 ) 正则. 创建 (“(\d{4}\.\d{2}\.\d{2}-\d{2}\.\d{2}\.\d{2}): '(\d{17}):([^']+)' ([^:]+): (.+)”, 局_文本数组 [局_计次3 ], , , , )判断 (正则. 取匹配数量 () ≠ 0 )局_原文时间 = 正则. 取子匹配文本 (1, 1, )局_转换后时间 = 日志时间转换 (局_原文时间 )局_SteamID = 正则. 取子匹配文本 (1, 2, )局_游戏名编号 = 正则. 取子匹配文本 (1, 3, ) 局_原文 = 文本_替换 (正则. 取子匹配文本 (1, 5, ), , , , “'”, “”, , , , , , , , )局_译文 = admin_命令翻译 (正则. 取子匹配文本 (1, 4, ), 局_原文 )正则. 创建 (“(\d{4}\.\d{2}\.\d{2}-\d{2}\.\d{2}\.\d{2}): (.+)”, 局_文本数组 [局_计次3 ], , , , )局_原文时间 = 正则. 取子匹配文本 (1, 1, )局_转换后时间 = 日志时间转换 (局_原文时间 )局_原文 = 文本_替换 (正则. 取子匹配文本 (1, 2, ), , , , “'”, “”, , , , , , , , )局_译文 = admin_命令翻译 (“其他”, 局_原文 )局_SQL语句 = “INSERT INTO log_admin_log (server_txt, file_name, log_time, real_time, SteamID, GameName_number, log_txt, real_txt, input_time) VALUES ('” + 局_目录数组 [局_计次 ] + “','” + 局_文件数组 [局_计次1 ] + “','” + 局_原文时间 + “','” + 局_转换后时间 + “','” + 局_SteamID + “','” + 局_游戏名编号 + “','” + 正则. 取子匹配文本 (1, 4, ) + “:” + 局_原文 + “','” + 局_译文 + “',now())” 如果真 (执行SQL语句 (局_数据库句柄, 局_SQL语句 ) = 假)调试输出 (局_文本数组 [局_计次3 ])调试输出 (“语句失败:” + 局_SQL语句 )跳出循环 ()如果真 (局_计次3 = 取数组成员数 (局_文本数组 )) 调试输出 (保存事务 (局_数据库句柄 )) 计次循环尾 ()调试输出 (“日志文件行数:” + 到文本 (取数组成员数 (局_文本数组 )) + “,正则/语句耗时:” + 到文本 (到整数 (时间_到时间戳 (取现行时间 (), 假, )) - 临时数值 ) + “毫秒”)
问题:单个日志文件有两千行左右,用上面的代码处理单个文件要耗时近1分钟,完全没有效率可言,希望有大佬帮忙优化代码或者提出新思路尽可能提升效率。
补充内容 (2024-10-17 10:45):
使用自带正则支持库也试过了,时间缩短到45秒左右,也还是太慢了,有几百个日志文件要处理
补充内容 (2024-10-17 11:35):
调试发现问题是由执行SQL导致的,经过优化,使用INSERT语句配合快速文本对象一次插入2000行数据,现在处理2059行数据缩减到2秒左右,还有优化空间吗 |
|