private VDataImport ImportFile(string dir, string fileName) { var model = new VDataImport(); using (var f = new StringReader(fileName)) { var lineN = 0; while (true) { var line = f.ReadLine(); if (line == null) break; lineN++; switch (lineN) { case 1: break; case 2: var line2 = line.Trim().Split("\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); _log.InfoFormat("NBins parsing: [{0}]", line); model.NBins = ParseInt(line2[2]); _log.InfoFormat("NBins: {0}", model.NBins); break; case 3: var line3 = line.Trim().Split("\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); model.NDirs = ParseInt(line3[0]); _log.InfoFormat("NDirs: {0}", model.NDirs); break; case 4: var line4 = line.Trim().Split("\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (var s in line4) { model.FreqByDirs.Add(ParseDecimal(s)); } break; default: var line5N = line.Trim().Split("\t ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); Debug.Assert(line5N.Length == model.NDirs + 1); // 1st cell contains bin number var tmp = new decimal[model.NDirs]; for (var i = 0; i < model.NDirs; i++) { tmp[i] = ParseDecimal(line5N[i + 1]); } model.FreqByBins.Add(tmp); break; } } } _log.Info("File import complete. Calculating..."); // MeanVelocityPerDir model.MeanVelocityPerDir.AddRange(new decimal[model.NDirs]); for (var binIdx = 0; binIdx < model.NBins; binIdx++) for (var dirIdx = 0; dirIdx < model.NDirs; dirIdx++) { var velocity = binIdx + 1; model.MeanVelocityPerDir[dirIdx] += (decimal)(velocity * (double)model.FreqByBins[binIdx][dirIdx] / 1000); } // Velocity frequencies model.VelocityFreq.Clear(); for (int binIdx = 0; binIdx < model.NBins; binIdx++) { decimal freq = 0; for (int dirIdx = 0; dirIdx < model.NDirs; dirIdx++) { freq += model.FreqByBins[binIdx][dirIdx] / 1000 * model.FreqByDirs[dirIdx]; } model.VelocityFreq.Add(new HPoint(binIdx, 0, freq)); } _log.Info("Import&Calculations complete."); return model; }
public JsonResult CurrentDataJson(VDataImport imported, VPointPage vpp) { var model = PopModel(); if (model.SelectedPoint == null) { _log.WarnFormat("CurrentFile is not set"); var dataEmpty = new { sEcho = 0, iTotalRecords = 0, iTotalDisplayRecords = 0, aaData = new List<decimal[]>() }; return Json(dataEmpty, JsonRequestBehavior.AllowGet); } //string DbDir = WebConfigurationManager.AppSettings["MesoWindTabDir" + Settings.DbType]; //var imported = ImportFile(DbDir, model.SelectedPoint.Text); var final = new List<string[]>(); var n = imported.NDirs + 1; var freqs = new string[n]; freqs[0] = "Frequencies"; for (var i = 0; i < imported.FreqByDirs.Count; i++) { freqs[i + 1] = imported.FreqByDirs[i].ToString(); } final.Add(freqs); for (var bIndex = 0; bIndex < imported.FreqByBins.Count; bIndex++) { var bin = imported.FreqByBins[bIndex]; var binWith13 = new string[n]; binWith13[0] = (bIndex + 1).ToString(); for (var i = 0; i < bin.Length; i++) { binWith13[i + 1] = bin[i].ToString(); } final.Add(binWith13); } var mean = new string[n]; mean[0] = "Mean Vel."; for (var i = 0; i < imported.MeanVelocityPerDir.Count; i++) { mean[i + 1] = imported.MeanVelocityPerDir[i].ToString(); } final.Add(mean); var data = new { sEcho = 0, iTotalRecords = imported.NBins, iTotalDisplayRecords = imported.NBins, aaData = final }; vpp.iTotalRecords = imported.NBins; vpp.iTotalDisplayRecords = imported.NBins; vpp.Data = final; return Json(data, JsonRequestBehavior.AllowGet); }