namespace CommonConsole { using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.Linq; public class Program { public static void Main(string[] args) { var messurementLines = File.ReadLines(@".\messurements.txt"); var messurements = new List(); var parsedData = new List(); var us = new CultureInfo("en-US"); var de = new CultureInfo("de-DE"); var any = NumberStyles.Any; var skipNext = true; foreach (var line in messurementLines) { if (string.IsNullOrWhiteSpace(line)) { if (parsedData.Count > 0) { messurements.Add(new Messurement { PcbId = parsedData.First().PcbId, Start = parsedData.Min(x => x.Timestamp), MinT = parsedData.Min(x => x.CurrentT), MinTOF = parsedData.Min(x => x.CurrentTOF), AvgT = parsedData.Average(x => x.CurrentT), AvgTOF = parsedData.Average(x => x.CurrentTOF), MaxT = parsedData.Max(x => x.CurrentT), MaxTOF = parsedData.Max(x => x.CurrentTOF), End = parsedData.Max(x => x.Timestamp), }); } parsedData = new List(); skipNext = true; continue; } if (skipNext) { skipNext = false; continue; } var lineTokens = line.Split(new[] { '\t' }, StringSplitOptions.RemoveEmptyEntries); if (lineTokens.Length != 4) { continue; } var dateString = lineTokens[0]; var pcbId = lineTokens[1]; var temperatureString = lineTokens[2]; var tofString = lineTokens[3]; _ = DateTime.TryParse(dateString.Substring(1, dateString.Length - 2), out var timestamp); _ = double.TryParse(temperatureString, any, us, out var currentT) || double.TryParse(temperatureString, any, de, out currentT); _ = double.TryParse(tofString, any, us, out var currentTOF) || double.TryParse(tofString, any, de, out currentT); parsedData.Add(new MessurementData { PcbId = pcbId, CurrentT = currentT, CurrentTOF = currentTOF, Timestamp = timestamp }); } File.WriteAllLines(@".\messurements.csv", messurements.Select(x => $"{x.PcbId,10}\t" + $"{x.AvgT,5:0.00}\t" + $"{x.AvgTOF,12:0.0000000000}\t" + $"{x.DifferenceT,5:00.00}\t" + $"{x.DifferenceTOF,12:0.0000000000}")); Console.WriteLine(Messurement.Header); messurements.ForEach(Console.WriteLine); } } public class MessurementData { public string PcbId { get; set; } public double CurrentT { get; set; } public double CurrentTOF { get; set; } public DateTime Timestamp { get; set; } } public class Messurement { public string PcbId { get; set; } public DateTime Start { get; set; } public double MinTOF { get; set; } public double MinT { get; set; } public double AvgTOF { get; set; } public double AvgT { get; set; } public double MaxTOF { get; set; } public double MaxT { get; set; } public DateTime End { get; set; } public double DifferenceT => Math.Abs(this.MaxT - this.MinT); public double DifferenceTOF => Math.Abs(this.MaxTOF - this.MinTOF); public override String ToString() => $"{this.PcbId,10}\t" + $"{this.Start,21:yyyy-MM-dd hh:mm:ss}\t" + $"{this.MinT,5:0.00}\t" + $"{this.MinTOF,12:0.0000000000}\t" + $"{this.AvgT,5:0.00}\t" + $"{this.AvgTOF,12:0.0000000000}\t" + $"{this.MaxT,5:0.00}\t" + $"{this.MaxTOF,12:0.0000000000}\t" + $"{this.End,21:yyyy-MM-dd hh:mm:ss}\t" + $"{this.DifferenceT,5:00.00}\t" + $"{this.DifferenceTOF,12:0.0000000000}"; public static string Header => $"{"PcbId",10}\t" + $"{"Start",21}\t" + $"{"Min T",5}\t" + $"{"Min TOF",12}\t" + $"{"Avg T",5}\t" + $"{"Avg TOF",12}\t" + $"{"Max T",5}\t" + $"{"Max TOF",12}\t" + $"{"End",21}\t" + $"{"Dif T",5}\t" + $"{"Dif TOF",12}"; } }