private bool SkipRows(CsvReader reader, int numRows) { IList<string> row; int i = 0; while (reader.ReadRow(out row)) { i++; if (i == numRows) break; } return i == numRows; }
public void Import(object importSettingsViewModel, Stream stream, CogProject project) { var reader = new CsvReader(new StreamReader(stream), ','); if (!SkipRows(reader, 5)) { project.Meanings.Clear(); project.Varieties.Clear(); return; } var varieties = new List<Variety>(); var meanings = new Dictionary<string, Meaning>(); IList<string> varietyRow; while (reader.ReadRow(out varietyRow)) { if (string.IsNullOrEmpty(varietyRow[0])) break; var variety = new Variety(varietyRow[0].Trim()); if (!SkipRows(reader, 2)) throw new ImportException("Metadata for a variety is incomplete."); Meaning curMeaning = null; IList<string> glossRow; while (reader.ReadRow(out glossRow) && glossRow.Any(s => !string.IsNullOrEmpty(s))) { if (!string.IsNullOrEmpty(glossRow[0])) { string gloss = glossRow[0].Trim(); curMeaning = meanings.GetValue(gloss, () => new Meaning(gloss, null)); } if (curMeaning == null) throw new ImportException("A gloss is missing."); string wordStr = glossRow[1].Trim(); if (!string.IsNullOrEmpty(wordStr)) variety.Words.Add(new Word(wordStr, curMeaning)); } varieties.Add(variety); } project.Meanings.ReplaceAll(meanings.Values); project.Varieties.ReplaceAll(varieties); }
public IEnumerable<Tuple<string, string>> Import(object importSettingsViewModel, Stream stream) { var mappings = new List<Tuple<string, string>>(); var reader = new CsvReader(new StreamReader(stream), _delimiter); IList<string> mapping; while (reader.ReadRow(out mapping)) { if (mapping.Count >= 2) { string str1 = mapping[0].Trim(); string str2 = mapping[1].Trim(); if (string.IsNullOrEmpty(str1) || string.IsNullOrEmpty(str2)) throw new ImportException("An empty segment is not allowed."); mappings.Add(Tuple.Create(str1, str2)); } } return mappings; }