当前位置: 首页 > news >正文

文件读取习题解析

日志分析系统

题目要求

开发一个日志文件分析系统,实现以下功能:

  1. 读取指定格式的日志文件
  2. 解析日志条目并统计各操作类型的出现频率
  3. 生成统计报告并保存到新文件
  4. 处理文件不存在、格式错误等异常情况

输入文件示例(log.txt)

[2025-07-30 09:15:23] user001 LOGIN 成功
[2025-07-30 09:16:45] user002 PURCHASE 商品ID:12345
[2025-07-30 09:17:12] user001 LOGOUT 正常退出
[2025-07-30 09:18:33] user003 LOGIN 成功
[2025-07-30 09:19:55] user002 SEARCH 关键词:手机
[2025-07-30 09:20:17] user003 PURCHASE 商品ID:67890

格式:[时间戳] 用户ID 操作类型 操作详情

输出文件示例(report.txt)

日志分析报告
生成时间:2025-07-30 10:00:00
总记录数:6操作统计:
LOGIN: 2次 (33.33%)
PURCHASE: 2次 (33.33%)
LOGOUT: 1次 (16.67%)
SEARCH: 1次 (16.67%)用户活跃度:
user001: 2次操作
user002: 2次操作
user003: 2次操作

思路:

  1. 读取文件,以行的方式
  2. 解析每一行(提取 用户 + 操作类型)
  3. 统计数据(两个 Dictionary + 总数)
  4. 计算百分比
  5. 写入新文件(按格式输出)

代码:

public void Init()
{List<string> list = new List<string>() {".txt",".pdf", ".word" };int sumCount = 0;Console.WriteLine("请输入文件路径:");string path = Console.ReadLine();if (!File.Exists(path)){Console.WriteLine("文件路径错误或文件不存在!");return;}if (!list.Contains(Path.GetExtension(path))){Console.WriteLine("不支持{0}文件!", Path.GetExtension(path));return;}// 记录操作Dictionary<string, int> operaDic = new Dictionary<string, int>();// 记录用户Dictionary<string, int> userDic = new Dictionary<string, int>();// 读取string [] fileInfo = File.ReadAllLines(path);// foreach 循环处理文件信息foreach (string line in fileInfo){// 数据错误if (line.Length < 4) continue;else{// 空格切割string[] lineSpl = line.Split(' ');// 获取操作string op = lineSpl[3];// 获取用户string user = lineSpl[2];// Key:操作 Value:次数 如果有 操作+1 没有则初始化if (operaDic.ContainsKey(op)) operaDic[op] += 1;else operaDic[op] = 1;// Key:用户 Value:活跃度 如果有 用户活跃度+1 没有则初始化if (userDic.ContainsKey(user)) userDic[user] += 1;else userDic[user] = 1;}// 总记录数sumCount ++;}// 处理ProductMsg(operaDic, userDic, sumCount);
}private void ProductMsg(Dictionary<string,int> opera,Dictionary<string,int> user,int count)
{// 使用StringBuilder 高效处理字符串StringBuilder rs = new StringBuilder();rs.AppendLine("日志分析报告");string dateTime = DateTime.Now.ToString("G");rs.AppendLine($"生成时间:{dateTime}");rs.AppendLine($"总记录数:{count}\n");rs.AppendLine("操作统计:");// 编辑操作字典foreach (KeyValuePair<string,int> kvp in opera){double number = kvp.Value * 100 / (double)count;rs.AppendLine($"{kvp.Key}:{kvp.Value}次({number:F2}%)");}rs.AppendLine("\n");rs.AppendLine("用户活跃度:");// 遍历用户字典foreach(KeyValuePair<string,int> kvp in user){rs.AppendLine($"{kvp.Key}:{kvp.Value}次操作");}Console.WriteLine("请输入日志存放路径:");string path = Console.ReadLine();if (path != null){File.WriteAllText(path, rs.ToString());Console.WriteLine("完成!");}else{Console.WriteLine("文件路径错误!");}
}
http://www.jsqmd.com/news/492231/

相关文章:

  • TensorFlow-v2.9问题解决指南:常见报错及解决方法
  • 创新项目验收测试:保障创新成果落地的关键环节
  • Tableau新手必看:如何用超市数据集快速掌握数据预处理技巧(2023最新版)
  • Phi-3-vision-128k-instruct多场景落地:从教育答疑、电商识别到工业质检全覆盖
  • Langchain4j + Ollama本地模型实战:5步搭建RAG问答系统(附避坑指南)
  • OpenClaw 集成飞书机器人完整配置步骤
  • 多模态融合的医学影像诊断系统:结合CT与MRI的肿瘤检测方法
  • 如何用AI替代传统照相馆?智能工坊低成本运营实战指南
  • SDP解析是什么意思
  • Unity3D中R3插件安装全攻略:从NuGet到Package Manager的完整流程
  • ESLyric-LyricsSource从入门到精通:打造Foobar2000完美歌词体验
  • Qwen3-Reranker-0.6B企业级应用:构建高效语义搜索系统完整方案
  • AIGC新篇章:Lingbot深度模型驱动3D内容生成与场景重建
  • 【MT5】MT5平台基本使用教程(01)--20
  • 关于NopCommerce3.6版用户登录详解
  • AI_agent-Airtable-nocodb-baserow-低代码平台
  • 告别时间不同步!Android14手机NTP服务器修改保姆级教程(无需Root)
  • 小白也能懂:用Qwen3-Reranker-0.6B轻松搞定文档相关性排序
  • GEE实战:Landsat 8影像云掩膜与批量导出优化指南
  • 5个迹象,说明你快被离职了
  • 为什么ESRGAN去掉BN层效果反而更好?深入解析网络设计中的取舍艺术
  • React + TipTap 双实例架构:高性能富文本消息列表与实时编辑的实现
  • YOLOv8推理指令详解:如何通过命令行高效完成目标检测任务
  • SVAC名词解释
  • 无人机认证与授权实战:5G网络下如何用3GPP TS 23.256规范搭建安全连接
  • Git-RSCLIP实战手册:上传→标注→推理→结果导出全链路操作截图详解
  • 【SoC】【ESP32】从零到一:ESP-IDF+VSCode环境下的首个物联网应用实战
  • 实战物联网:基于快马AI构建稳定安全的树莓派内网穿透访问方案
  • DLSSTweaks实战进阶:NVIDIA DLSS深度优化技术指南
  • 【VS离线部署实战】基于配置导出的Visual Studio 2022社区版完整迁移方案