private static IDiagnosticFreezeFrameDto GetFreezeFrameInfo(string text) { // Check Input. if (text == null) { return(null); } // Create Result. var result = new DiagnosticFreezeFrameDto { FreezeFrameDiagnosticTroubleCode = GetFieldValue(text, "FF_DTC"), FreezeFrameSensorGroups = new List <IDiagnosticFreezeFrameSensorGroupDto>() }; // Split for Sensor Groups. var groups = Regex.Split(text, @"""FF_SENSORS""").Skip(1).ToList(); foreach (var group in groups) { // Create Sensor Group. var sensorGroup = new DiagnosticFreezeFrameSensorGroupDto { FreezeFrameSensors = new List <IDiagnosticFreezeFrameSensorDto>() }; // Load Sensors. var sensors = Regex.Split(group, @"""FF_SENSOR""").Skip(1).ToList(); foreach (var sensor in sensors) { // Add Delimiter. var s = @"""FF_SENSOR""" + sensor; // Load Sensor. sensorGroup.FreezeFrameSensors.Add(new DiagnosticFreezeFrameSensorDto { SensorName = GetFieldValue(s, "FF_SENSOR"), SensorValue = GetFieldValue(s, "FF_VALUE"), SensorUnit = GetFieldValue(s, "FF_UNITS") }); } // Add to Result. result.FreezeFrameSensorGroups.Add(sensorGroup); } return(result); }
private static IDiagnosticFreezeFrameSensorGroupDto GetFreezeFrameSensorGroup(List <string> lines) { // Check Input. if (!lines?.Any() ?? true) { return(null); } // Create Sensor. var result = new DiagnosticFreezeFrameSensorGroupDto { FreezeFrameSensors = new List <IDiagnosticFreezeFrameSensorDto>() }; // Populate Result. for (var i = 0; i < lines.Count - 1; ++i) { // Check Line. if (CheckLine(lines[i], lines[i + 1])) { continue; } // Check Sensor. if (!lines[i].StartsWith("<FF_SENSOR_")) { continue; } // Load Sensor. var endIndex = lines.FindIndex(i + 1, e => e.StartsWith("<FF_SENSOR_")) - 1; endIndex = endIndex < 0 ? lines.Count - 1 : endIndex; result.FreezeFrameSensors.Add(GetFreezeFrameSensor(lines.Skip(i).Take(endIndex - i + 1).ToList())); i = endIndex; } // Return. return(result); }