using IStation.Model; using MathNet.Numerics; using MathNet.Numerics.Interpolation; using MathNet.Numerics.LinearRegression; using MathNet.Numerics.Statistics; using NPOI.HPSF; using System.Data; using System.Text; namespace IStation.Test { internal class Program { static string _dataName = ".csv"; static string _oldCurveurveName = "_old_curve.csv"; static string _newCurveName = "_update_curve.csv"; static void Main(string[] args) { var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcsv"); var list = GetFileInfoList(fullPath); foreach (var item in list) { var key = item.Key; var dataFile = item.DataFile; var oldCurveFile = item.OldCurveFile; var updateCurveFile = Path.Combine(fullPath, $"{key}{_newCurveName}"); var splineList = new List(); var dataList = new List(); using (var fs = new FileStream(oldCurveFile, FileMode.Open, FileAccess.Read)) using (var sr = new StreamReader(fs, Encoding.UTF8)) { var strLine = string.Empty; sr.ReadLine(); while (!string.IsNullOrEmpty(strLine = sr.ReadLine())) { var strList = strLine.Split(','); var x = double.Parse(strList[0]); var y = double.Parse(strList[1]); splineList.Add(new CurvePoint(x, y)); } } using (var fs = new FileStream(dataFile, FileMode.Open, FileAccess.Read)) using (var sr = new StreamReader(fs, Encoding.UTF8)) { var strLine = string.Empty; sr.ReadLine(); while (!string.IsNullOrEmpty(strLine = sr.ReadLine())) { var strList = strLine.Split(','); var x = double.Parse(strList[0]); var y = double.Parse(strList[1]); dataList.Add(new CurvePoint(x, y)); } } var splineX = splineList.Select(x => x.X).ToArray(); var splineY = splineList.Select(x => x.Y).ToArray(); dataList = dataList.OrderBy(x => x.X).ToList(); var dataXAll = dataList.Select(x => x.X).ToArray(); var dataYAll = dataList.Select(x => x.Y).ToArray(); var dataCount = dataXAll.Length; if (dataCount < 20) { Console.WriteLine($"{key} Count:{dataCount} <20 skip"); } var helper = new PumpCurveDataFusionCorrectorHelper2(); //PumpCurveDataFusionCorrectorHelper2DeepSeek (double[] mergedX, double[] mergedY, double[] optimizedX, double[] optimizedY) = helper.Corrent(splineX, splineY, dataXAll, dataYAll); var optimizedCount = optimizedX?.Length ?? 0; Console.WriteLine($"{key} Count:{dataCount} OptimizedCount:{optimizedCount}"); if (optimizedCount < 1) { Console.WriteLine($"{key} skip"); continue; } var optimizedPtList = new List(); for (int i = 0; i < optimizedCount; i++) { var x = optimizedX[i]; var y = optimizedY[i]; optimizedPtList.Add(new CurvePoint(x, y)); } CsvHelper.ExportToCsv(optimizedPtList, updateCurveFile); } Console.WriteLine("ok"); Console.ReadKey(); } static List<(string Key, string DataFile, string OldCurveFile)> GetFileInfoList(string folder) { if (!Directory.Exists(folder)) return default; var files = Directory.GetFiles(folder); if (files == null || files.Count() < 1) return default; var list = new List<(string Key, string dataFile, string oldCurveFile)>(files.Count()); var group = files.GroupBy(x => Path.GetFileName(x).Substring(0, 5)); foreach (var item in group) { var name = item.Key; var dataFile = $"{folder}\\{name}{_dataName}"; var oldCurveFile = $"{folder}\\{name}{_oldCurveurveName}"; list.Add((item.Key, dataFile, oldCurveFile)); } return list; } } }