public void AddReading(SkipperDataSet.SensorReadingsRow row) { row.SensorFileRow = this.Row; Persistance.Data.SensorReadings.AddSensorReadingsRow(row); }
public override SensorFile ImportFile(string path, Boat boat) { StringBuilder log = new StringBuilder(); char[] splitter = new char[] { ',' }; FileInfo fi = new FileInfo(path); SensorFile file = new SensorFile("csv", fi.Name, DateTime.Now); file.Save(); int lineNumber = 1; StreamReader reader = new StreamReader(path); bool isFirst = true; while (!reader.EndOfStream) { try { string line = reader.ReadLine(); if ((_skipFirstRow && !isFirst) || !_skipFirstRow) { DateTime date = DateTime.Now; string latDirection = ""; string longDirection = ""; string heightUnit = ""; string speedUnit = ""; string[] parts = line.Split(splitter); if (parts.Length != _mappings.Count) { log.Append("Line " + lineNumber + " has an unexpected number of columns"); } bool filtered = false; foreach (int i in _allowedValues.Keys) { if (!_allowedValues[i].Contains(parts[i])) { filtered = true; break; } } if (!filtered) { SkipperDataSet.SensorReadingsRow reading = (SkipperDataSet.SensorReadingsRow)Persistance.Data.SensorReadings.NewRow(); for (int i = 0; i < parts.Length; i++) { if (Persistance.Data.SensorReadings.Columns.Contains(_mappings[i])) { if (Persistance.Data.SensorReadings.Columns[_mappings[i]].DataType == typeof(double)) { if (_mappings[i] == "latitude") { if (latDirection != "") { reading[_mappings[i]] = ConvertValueWithUnit(parts[i] + " " + latDirection); } else { reading[_mappings[i]] = ConvertValueWithUnit(parts[i]); } } else if (_mappings[i] == "longitude") { if (longDirection != "") { reading[_mappings[i]] = ConvertValueWithUnit(parts[i] + " " + longDirection); } else { reading[_mappings[i]] = ConvertValueWithUnit(parts[i]); } } else if (_mappings[i] == "altitude") { if (heightUnit != "") { reading[_mappings[i]] = ConvertValueWithUnit(parts[i] + " " + heightUnit); } else { reading[_mappings[i]] = ConvertValueWithUnit(parts[i]); } } else if (_mappings[i] == "speed") { if (speedUnit != "") { reading[_mappings[i]] = ConvertValueWithUnit(parts[i] + " " + speedUnit); } else { reading[_mappings[i]] = ConvertValueWithUnit(parts[i]); } } else { reading[_mappings[i]] = ConvertValueWithUnit(parts[i]); } } else if (Persistance.Data.SensorReadings.Columns[_mappings[i]].DataType == typeof(string)) { reading[_mappings[i]] = parts[i]; } else if (Persistance.Data.SensorReadings.Columns[_mappings[i]].DataType == typeof(DateTime)) { date = DateTime.Parse(parts[i]); reading[_mappings[i]] = date; } else { throw new Exception("Unknown type"); } } else { if (_mappings[i] == "date") { int hours = date.Hour; int minutes = date.Minute; int seconds = date.Second; int millis = date.Millisecond; date = DateTime.Parse(parts[i]); date = date.Add(new TimeSpan(0, hours, minutes, seconds, millis)); reading["datetime"] = date; } else if (_mappings[i] == "time") { int hours = date.Hour; int minutes = date.Minute; int seconds = date.Second; int millis = date.Millisecond; date = date.Subtract(new TimeSpan(0, hours, minutes, seconds, millis)); date = date.Add(TimeSpan.Parse(parts[i])); reading["datetime"] = date; } else if (_mappings[i] == "n/s") { latDirection = parts[i].ToLower(); if (reading["latitude"] != System.DBNull.Value) { reading["latitude"] = ConvertValueWithUnit(reading["latitude"] + " " + latDirection); } } else if (_mappings[i] == "e/w") { longDirection = parts[i].ToLower(); if (reading["longitude"] != System.DBNull.Value) { reading["longitude"] = ConvertValueWithUnit(reading["longitude"] + " " + longDirection); } } else if (_mappings[i] == "height unit") { heightUnit = parts[i].ToLower(); if (reading["altitude"] != System.DBNull.Value) { reading["altitude"] = ConvertValueWithUnit(reading["altitude"] + " " + heightUnit); } } else if (_mappings[i] == "speed unit") { speedUnit = parts[i].ToLower(); if (reading["speed"] != System.DBNull.Value) { reading["speed"] = ConvertValueWithUnit(reading["speed"] + " " + speedUnit); } } else if (_mappings[i] == "") { } else { throw new Exception("invalid column mapping"); } } } file.AddReading(reading); } } else { isFirst = false; } } catch (Exception e) { log.Append("Error loading line " + lineNumber + ". " + e.Message + Environment.NewLine); } lineNumber++; } reader.Close(); if (log.Length > 0) { if (log.ToString().Length > 1000) { log.Remove(1000, log.ToString().Length - 1000); } MessageBox.Show("Errors occured while loading the file" + Environment.NewLine + log.ToString()); } boat.AddFile(file); return(file); }