using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Adaptation.FileHandlers.csv; public class Calibration { public string NumberOfCalibrationSets { get; set; } public List DataSets { get; set; } #nullable enable #pragma warning disable CA1834 internal static Calibration? GetCalibration(string[] lines, int start, int stop) { Calibration? result; string first; DataSet dataSet; Position position; string[] segments; int? thirdStart = null; int? secondStart = null; List positions; List values = new(); List dataSets = new(); StringBuilder stringBuilder = new(); for (int i = start; i < stop; i++) { segments = lines[i].Split(new string[] { "," }, StringSplitOptions.None); first = segments.First(); if (first == "DataSet:") { secondStart = i + 1; break; } _ = stringBuilder.Append(first).Append(","); if (segments.Length > 1) values.Add(segments[1]); else values.Add(string.Empty); } string header = "Number of Calibration Sets,"; if (secondStart is null || stringBuilder.Length != header.Length || stringBuilder.ToString() != header) result = null; else { result = new() { NumberOfCalibrationSets = values[0], DataSets = dataSets, }; for (int x = 0; x < int.MaxValue; x++) { values.Clear(); _ = stringBuilder.Clear(); if (secondStart is null) break; for (int i = secondStart.Value; i < stop; i++) { segments = lines[i].Split(new string[] { "," }, StringSplitOptions.None); first = segments.First(); if (first == "Resistivity(ohm-cm)") { thirdStart = i + 1; break; } if (first == " Sample Set:") continue; _ = stringBuilder.Append(first).Append(","); if (segments.Length > 1) values.Add(segments[1]); else values.Add(string.Empty); } secondStart = null; header = "Operator,Date & Time,Finish,Orientation,North Probe ID,South Probe ID,Polarity,Contact Radius (µm),Probe Spacing (µm),Load (gm),X Step (µm),Name,Plate ID,Type,Points per Sample,Number of Pairs,"; if (thirdStart is null || stringBuilder.Length != header.Length || stringBuilder.ToString() != header) result = null; else { positions = new(); dataSet = new() { Operator = values[0], DateTime = values[1], Finish = values[2], Orientation = values[3], NorthProbeID = values[4], SouthProbeID = values[5], Polarity = values[6], ContactRadius = values[7], ProbeSpacing = values[8], Load = values[9], XStep = values[10], Name = values[11], PlateId = values[12], Type = values[13], PointsPerSample = values[14], NumberOfPairs = values[15], Positions = positions, }; dataSets.Add(dataSet); for (int i = thirdStart.Value; i < stop; i++) { segments = lines[i].Split(new string[] { "," }, StringSplitOptions.None); first = segments.First(); if (first == "DataSet:") { secondStart = i + 1; break; } if (segments.Length < 5) continue; position = new() { Resistivity = segments[0], Resistance = segments[1], PercentStandardDeviation = segments[2], Number = segments[3], Name = segments[4], }; positions.Add(position); } } } } return result; } }