public static FieldHeadersInfo CreateFieldHeaderinfo(string newCSVFilePath, string LatFieldName = "", string LongFieldName = "", string DisplayFieldName="") { Row row = new Row(); Row headerFields = new Row(); using (CsvParser reader = new CsvParser(newCSVFilePath)) { //Read the header line if (!reader.ReadOneRow(row)) return null; headerFields = row; //Set up the field info List<FieldInfo> FieldInfos = new List<FieldInfo>(); FieldInfo SelectedLatField = null; FieldInfo SelectedLongField = null; foreach (string fieldName in headerFields) { FieldInfo field; //If lat/long field has been set previously, use it if (fieldName == LatFieldName) { field = new FieldInfo(LatFieldName, true, false); SelectedLatField = field; } else if (fieldName == LongFieldName) { field = new FieldInfo(LongFieldName, false, true); SelectedLongField = field; } //Otherwise, try to find the fields that potentially contain location information else if (string.Compare(fieldName.ToLower(), "y") == 0) { field = new FieldInfo(fieldName, true, false); if (SelectedLatField == null) SelectedLatField = field; } else if (fieldName.ToLower().Contains("lat")) { field = new FieldInfo(fieldName, true, false); if (SelectedLatField == null) SelectedLatField = field; } else if (string.Compare(fieldName.ToLower(), "x") == 0) { field = new FieldInfo(fieldName, false, true); if (SelectedLongField == null) SelectedLongField = field; } else if (fieldName.ToLower().Contains("lon")) { field = new FieldInfo(fieldName, false, true); if (SelectedLongField == null) SelectedLongField = field; } else field = new FieldInfo(fieldName, false, false); FieldInfos.Add(field); } //Update properties to trigger UI change FieldHeadersInfo fieldHeadersInfo = new FieldHeadersInfo(); fieldHeadersInfo.Fields = FieldInfos; fieldHeadersInfo.SelectedLatField = SelectedLatField == null ? fieldHeadersInfo.Fields.First() : SelectedLatField; fieldHeadersInfo.SelectedLongField = SelectedLongField == null ? fieldHeadersInfo.Fields.First() : SelectedLongField; fieldHeadersInfo.SelectedDisplayField = string.IsNullOrEmpty(DisplayFieldName) ? fieldHeadersInfo.Fields.First() : fieldHeadersInfo.Fields.First(f => f.FieldName == DisplayFieldName); fieldHeadersInfo.FieldsVisibility = Visibility.Visible; return fieldHeadersInfo; } }
/// <summary> /// Create features from the csv file /// </summary> private void ParseCsvData() { Features = new List<Feature>(); Row row = new Row(); try { using (CsvParser reader = new CsvParser(CsvFilePath)) { //Read off the first line if (!reader.ReadOneRow(row)) return; //Read a row while (reader.ReadOneRow(row)) { //Read the fields IDictionary<string, object> Attributes = new Dictionary<string, object>(); for (int i = 0; i < row.Count(); i++) Attributes.Add(FieldHeadersInfo.Fields[i].FieldName, row[i].ToString()); Feature feature = new Feature(Attributes); Features.Add(feature); } } } catch (IOException) { MessageBox.Show("Error reading csv file"); } catch (Exception) { MessageBox.Show("Error occured"); } }