# 解析器设计 > 所属模块:[架构概览](../概览.md) --- ## 文档索引 | 文档 | 说明 | |------|------| | [文件名解析器](./FileNameParser.md) | 从文件名提取场景信息 | | [Qfod 解析器](./Qfod解析器.md) | Qfod 格式日志解析设计 | | [Ploss 解析器](./Ploss解析器.md) | Ploss FOD 格式日志解析设计 | --- ## 通用接口定义 ```csharp // Parsers/IParser.cs namespace WCTDataMiner.Parsers; public interface IParser { /// /// 判断是否可以解析该行 /// bool CanParse(string line); /// /// 解析日志行 /// /// 日志行内容 /// 关联的测试场景ID,用于外键关联(由 ParseService 从 FileNameParser 获取后传入) ParseResult Parse(string line, Guid scenarioId); } public record ParseResult { public bool IsSuccess { get; init; } public TRecord? Record { get; init; } public string? ErrorType { get; init; } public string? ErrorMessage { get; init; } public static ParseResult Success(TRecord record) => new() { IsSuccess = true, Record = record }; public static ParseResult Failure(string errorType, string errorMessage) => new() { IsSuccess = false, ErrorType = errorType, ErrorMessage = errorMessage }; } ``` --- ## 解析流程 ```mermaid flowchart TD A[读取日志文件] --> B[逐行遍历] B --> C{判断行类型} C -->|Qfod| D[QfodParser.Parse] C -->|Ploss| E[PlossParser.Parse] C -->|其他| F[跳过] D --> G{解析成功?} E --> G G -->|成功| H[添加到记录列表] G -->|失败| I[记录到 ParseError] H --> J[批量保存到数据库] I --> J J --> K[输出解析报告] ``` --- ## 错误类型定义 | ErrorType | 说明 | 处理方式 | |-----------|------|----------| | FORMAT_MISMATCH | 行格式不匹配正则表达式 | 跳过该行,记录原始内容 | | TYPE_CONVERSION | 字段类型转换失败 | 跳过该行,记录错误字段 | > **说明**:VALUE_OUT_OF_RANGE 错误类型暂未实现,后续可根据需要添加字段值范围校验逻辑。