Files
2026-08-13 09:56:08 +03:00

127 lines
5.1 KiB
C#

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<ResultRecord> records)
{
NumberFormatInfo nfi = new NumberFormatInfo
{
NumberDecimalSeparator = ","
};
var rows = new List<List<string>>();
rows.Add(new List<string>
{
"ИД",
"Название пробы",
"Дата и время отбора пробы",
"Место отбора пробы",
"Дополнительная информация о пробе",
"Дата и время создания записи",
"Дата и время редактирования записи",
"Тип сепаратора",
"Марка пробы",
"Марка кондиционирующей смеси",
"Норма расхода кондиционирующей смеси, кг/т",
"Количество частиц",
"Средняя нормированная обработанная площадь",
"50-й процентиль",
"10-й процентиль",
"90-й процентиль",
"Ширина центрального диапазона",
"Межгранульное среднеквадратичное отклонение",
"Межгранульная неоднородность",
"Доля необработанных гранул",
"Средняя внутригранульная неоднородность",
"Средняя горячая площадь",
"Средний интегральный оптический показатель"
});
foreach (var record in records)
{
var results = ResultsPostProcessor.PostProcess(record);
var row = new List<string>
{
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));
}
}