private void btnLoad_Click(object sender, EventArgs e) { if (!Directory.Exists(txtDir.Text)) { MessageBox.Show("Please choose a log directory"); return; } settings = LoadSettings(); closedCount = 0; logs = new List <ME7LoggerLog>(); dataPointsByLog = new Dictionary <ME7LoggerLog, DataPointCollection>(); DirectoryInfo dir = new DirectoryInfo(txtDir.Text); int errors = 0; foreach (FileInfo file in dir.GetFiles("*.csv")) { try { ME7LoggerSession session = new ME7LoggerSession("", file.FullName, noWait: true); session.LogLineRead += LogLineRead; session.StatusChanged += SessionStatusChanged; ME7LoggerLog log = session.Log; logs.Add(log); dataPointsByLog[log] = new DataPointCollection(settings); session.Open(); } catch (Exception ex) { errors++; closedCount++; } } //waiting for all logs to finish reading (hope visualme7logger.output is threadsafe :) ) while (errors + closedCount < logs.Count) { System.Threading.Thread.Sleep(10); } BuildValues(); if (errors > 0) { MessageBox.Show("Errors while processing log files"); } }
private void btnLoad_Click(object sender, EventArgs e) { wait = true; closedCount = 0; logs = new List <ME7LoggerLog>(); dataPointsByLog = new Dictionary <ME7LoggerLog, List <DataPoint> >(); logsByDutyCycle = new Dictionary <decimal, HashSet <ME7LoggerLog> >(); DirectoryInfo dir = new DirectoryInfo(txtDir.Text); int errors = 0; foreach (FileInfo file in dir.GetFiles("*.csv")) { try { ME7LoggerSession session = new ME7LoggerSession("", file.FullName, noWait: true); session.LogLineRead += LogLineRead; session.StatusChanged += SessionStatusChanged; session.Open(); ME7LoggerLog log = session.Log; logs.Add(log); dataPointsByLog[log] = new List <DataPoint>(); } catch { errors++; } } //waiting for all logs to finish reading (hope visualme7logger.output is threadsafe :) ) while (wait) { System.Threading.Thread.Sleep(10); } foreach (var log in dataPointsByLog.Keys) { List <DataPoint> dataPoints = dataPointsByLog[log]; if (dataPoints.Count == 0) { continue; } int roundedDC = (int)Math.Round(dataPoints[dataPoints.Count / 2].dutyCycle); for (int d = 0; d < dutyCycles.Length; ++d) { if (dutyCycles[d] == roundedDC) { for (int r = 0; r < rpms.Length; ++r) { int rpm = rpms[r]; List <DataPoint> highPoints = new List <DataPoint>(); List <DataPoint> lowPoints = new List <DataPoint>(); for (int i = 0; i < dataPoints.Count; ++i) { if (dataPoints[i].rpm <= rpm && (dataPoints.Count >= i + 1 || dataPoints[i + 1].rpm >= rpm)) { lowPoints.Add(dataPoints[i]); } else if (dataPoints[i].rpm >= rpm && (i - 1 < 0 || dataPoints[i - 1].rpm <= rpm)) { highPoints.Add(dataPoints[i]); } } decimal highPressure = highPoints.Count > 0 ? highPoints.Average(p => p.absolutePressure) : 0; decimal lowPressure = lowPoints.Count > 0 ? lowPoints.Average(p => p.absolutePressure) : 0; decimal value = highPressure == 0 ? lowPressure : lowPressure == 0 ? highPressure : (highPressure + lowPressure) / 2; grdTable.Rows[r + 1].Cells[d + 1].Value = value.ToString("0.000"); } } } } MessageBox.Show(string.Format("Done with {0} errors", errors)); }