155 lines
5.0 KiB
C#
155 lines
5.0 KiB
C#
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<Messurement>();
|
|
|
|
var parsedData = new List<MessurementData>();
|
|
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<MessurementData>();
|
|
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}";
|
|
}
|
|
}
|