using System.Text; using System.Globalization; using GSS2.Core.Analysis.AmineContent.Database; namespace GSS2.Core.Analysis.AmineContent; public static class ResultExporter { static ResultExporter() { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); } public static void ExportCsv(string path, IEnumerable records) { NumberFormatInfo nfi = new NumberFormatInfo { NumberDecimalSeparator = "," }; var rows = new List>(); rows.Add(new List { "ИД", "Название пробы", "Дата и время отбора пробы", "Место отбора пробы", "Дополнительная информация о пробе", "Дата и время создания записи", "Дата и время редактирования записи", "Тип сепаратора", "Марка пробы", "Марка кондиционирующей смеси", "Норма расхода кондиционирующей смеси, кг/т", "Количество частиц", "Средняя нормированная обработанная площадь", "50-й процентиль", "10-й процентиль", "90-й процентиль", "Ширина центрального диапазона", "Межгранульное среднеквадратичное отклонение", "Межгранульная неоднородность", "Доля необработанных гранул", "Средняя внутригранульная неоднородность", "Средняя горячая площадь", "Средний интегральный оптический показатель" }); foreach (var record in records) { var results = ResultsPostProcessor.PostProcess(record); var row = new List { record.Id.ToString(), record.SampleName, record.SamplingDateTime.ToString("dd.MM.yyyy hh:mm:ss"), record.SamplingPlace, record.SampleComment, record.CreateDateTime.ToString("dd.MM.yyyy hh:mm:ss"), record.EditDateTime.ToString("dd.MM.yyyy hh:mm:ss"), record.SeparatorType, record.BrandName, record.MixtureName, record.MixtureNormalRate.ToString("F3", nfi), results.values.Count().ToString(), results.meanProcessedArea.ToString("F3", nfi), results.processedAreaP50.ToString("F3", nfi), results.processedAreaP10.ToString("F3", nfi), results.processedAreaP90.ToString("F3", nfi), results.processedAreaDeltaP90P10.ToString("F3", nfi), results.processedAreaStdDev.ToString("F3", nfi), results.interHeterogeneity.ToString("F3", nfi), results.unprocessedFraction.ToString("F3", nfi), results.meanInnerHeterogeneity.ToString("F3", nfi), results.meanHotspotArea.ToString("F3", nfi), results.meanOpticalIntegral.ToString("F3", nfi) }; rows.Add(row); row = Enumerable.Repeat("", 23).ToList(); row.Add("Нормированная обработанная площадь"); foreach (var v in results.processedAreas) row.Add(v.ToString("F3", nfi)); rows.Add(row); row = Enumerable.Repeat("", 23).ToList(); row.Add("Горячая площадь"); foreach (var v in results.hotspotAreas) row.Add(v.ToString("F3", nfi)); rows.Add(row); row = Enumerable.Repeat("", 23).ToList(); row.Add("Оптический интегральный показатель"); foreach (var v in results.opticalIntegrals) row.Add(v.ToString("F3", nfi)); rows.Add(row); row = Enumerable.Repeat("", 23).ToList(); row.Add("Нормированная обработанная площадь"); foreach (var v in results.innerStdDevs) row.Add(v.ToString("F3", nfi)); rows.Add(row); row = Enumerable.Repeat("", 23).ToList(); row.Add("Внутригранульная неоднородность"); foreach (var v in results.innerHeterogeneities) row.Add(v.ToString("F3", nfi)); rows.Add(row); } var sb = new StringBuilder(); foreach (var row in rows) { foreach (var cell in row) { sb.Append(cell); sb.Append(";"); } sb.Append("\n"); } File.WriteAllText(path, sb.ToString(), Encoding.GetEncoding(1251)); } }