//Получение сгенерированных строк public List<Row> GetRandomRows(int columnQuantity, int rowQuantity, int stringLenght) { var randomRows = new List<Row>(); var factory = new Factory(stringLenght); factory.GenerateListRandomTypes(columnQuantity); //Генерация случайных типов var header = new Row(0); //Получение заголовка for(var headcellIndex = 0; headcellIndex < columnQuantity; headcellIndex++) { var cell = new Cell(headcellIndex); cell.Value = factory.GetHeaderRandomValue(headcellIndex); header.Cells.Add(cell); } randomRows.Add(header); //Генерация остальных строк for(var rowIndex = 1; rowIndex <= rowQuantity; rowIndex++) { var row = new Row(rowIndex); //Создание строки с ID for(var cellIndex = 0; cellIndex < columnQuantity; cellIndex++) { var cell = new Cell(cellIndex); cell.Value = factory.GetRandomValue(cellIndex); //Генерация значения row.Cells.Add(cell); } randomRows.Add(row); } return randomRows; }
//Парсинг CSV public List<Row> ParseCSV() { Factory factory = new Factory(); List<Row> result = new List<Row>(); string[] rows = GetRows(); string headRow = rows[0]; List<string> types = GetTypes(headRow); for (var rowIndex = 0; rowIndex < rows.Length; rowIndex++) { var row = new Row(rowIndex); string line = rows[rowIndex]; if (string.IsNullOrWhiteSpace(line)) { Console.WriteLine("Строка пуста, файл некорректен"); Console.ReadKey(); Environment.Exit(1); } string[] parts = SplitLine(line); for (var cellIndex = 0; cellIndex < parts.Length; cellIndex++) { var cell = new Cell(cellIndex); string part = parts[cellIndex]; //Значение string type = types[cellIndex]; //Тип string piece; //Обработка правил CSV формата if (rowIndex == 0) { string columnName = part.Split(nameTypeSeparator).First(); string typeName = part.Split(nameTypeSeparator).Last(); var handledColumnName = HandleSpecialSymbolsAndQoute(columnName); piece = handledColumnName + nameTypeSeparator + typeName; //Получение обработанного значения ячейки cell.Value = factory.GetValueFromString(piece, headerType); //Получение значения необходимого типа } else { piece = HandleSpecialSymbolsAndQoute(part); //Получение обработанного значения cell.Value = factory.GetValueFromString(piece, type); //Получение значения необходимого типа } row.Cells.Add(cell); } result.Add(row); } return result; }
public static Place FromRow(Row row, int id) { var place = new Place { Id = id, EnglishName = (string) row.ValueOfColumnContaining("English"), Type = (string) row.ValueOfColumnContaining("Type"), Parish = (string) row.ValueOfColumnContaining("Parish"), Keverang = (string) row.ValueOfColumnContaining("Keverang"), GridReference = (string) row.ValueOfColumnContaining("Grid"), CornishName = (string) row.ValueOfColumnContaining("Cornish"), Administration = (string) row.ValueOfColumnContaining("Administration"), Notes = (string) row.ValueOfColumnContaining("Notes"), Etymology = (string) row.ValueOfColumnContaining("Etymology"), HistoricForms = (string) row.ValueOfColumnContaining("Historic") }; return place; }
//Получение типа столбца для проверки фильтра public ConverteType GetFilterType(Row header, string columnName) { Factory factory = new Factory(); foreach (var cell in header.Cells) { string name = cell.Value.DisplayValue().Split(nameTypeSeparator).First(); if (name == columnName) { string columnType = cell.Value.DisplayValue().Split(nameTypeSeparator).Last(); return factory.GetConverteType(columnType); } } NotFoundColumnName(); return ConverteType.String; //Метод должен вернуть значение }
//Получение номера столбца public int GetColumnId(Row header, string columnName) { foreach(var cell in header.Cells) { string name = cell.Value.DisplayValue().Split(nameTypeSeparator).First(); if (name == columnName) return cell.ColumnId; } NotFoundColumnName(); return 0; }