forked from amkovkov/GranuSightSoftware2
127 lines
5.1 KiB
C#
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));
|
|
}
|
|
}
|