public void SetUp() { var settings = new CsvSettings(@"../../../Tmp/products.csv", @"../../../Tmp/products_corr_no_header.csv"); var reader = ReaderFactory.CreateReader(settings); _products = reader.ReadProducts().ToList(); _correlationTable = (CorrelationTable)reader.ReadTable(TableType.Correlation); ((CsvSettings)reader.Settings).PathToTable = @"../../../Tmp/substitutes.csv"; _substitutesTable = (SubstitutesTable)reader.ReadTable(TableType.Substitutes); }
/// <summary> /// Чтение корреляционной таблицы /// </summary> /// <param name="table"></param> static public CorrelationTable ReadCorrelationTable(string filename) { var raw_data = new List <List <int> >(); //Числа из файла var x_headers = new List <Range>(); var y_headers = new List <Range>(); int width = -1; //Ширина таблицы double bx = -1, by = -1; try { //Чтение файла using (var sr = new StreamReader(filename)) { string line; //Читаем первую линию с интервалами line = sr.ReadLine(); if (line == null) { throw new ParseException("Файл пуст"); } var strings = separate_line(line); x_headers = parse_ranges(strings[1]); //Читаем остальные оинии while ((line = sr.ReadLine()) != null) { strings = separate_line(line); y_headers.Add(Range.Parse(strings[0])); //Опеределяем интервал из первого столбца var line_data = parse_values(strings[1]); //Проврека на равенство длин всех строк if (width == -1) { width = line_data.Count; } else if (width != line_data.Count) { throw new ParseException("Длины строк в таблице не совпадают"); } raw_data.Add(line_data); } } }catch (FormatException exp) { throw new ParseException("В таблице присутствует значение в неправильом формате"); } //Составление таблицы из данных //Определение размера интервала и проверка того, что они все одинаковы foreach (var v in x_headers) { if (!set_or_not_update(ref bx, v.Length)) { throw new ParseException("Длины интервалов должны быть одинаковы"); } } foreach (var v in y_headers) { if (!set_or_not_update(ref by, v.Length)) { throw new ParseException("Длины интервалов должны быть одинаковы"); } } var table = new CorrelationTable(x_headers.Count, y_headers.Count, bx, by); //Перенос интервалов for (int i = 0; i < x_headers.Count; i++) { table.SetX(i, x_headers[i]); } for (int i = 0; i < y_headers.Count; i++) { table.SetY(i, y_headers[i]); } //Перенос значений for (int x = 0; x < x_headers.Count; x++) { for (int y = 0; y < y_headers.Count; y++) { table[x, y] = raw_data[y][x]; } } return(table); }
public PacketBuilder AddCorrelationTable(CorrelationTable table) { _correlationTable = table; return(this); }