using System; using System.Collections.Generic; using System.IO; using Deltares.Geotechnics; using Deltares.Geotechnics.Soils; using Deltares.Standard.EventPublisher; namespace Deltares.MStab.IO.Classic { public class StressCurveReader { public StressCurveReader() {} public List ReadStressCurves(string fileName) { var stressCurves = new List(); DataEventPublisher.InvokeWithoutPublishingEvents(() => { if (File.Exists(fileName)) { string[] lines = File.ReadAllLines(fileName); bool headerPassed = false; bool expectNewStressCurve = false; bool expectHeader = false; int counter = 0; StressCurve stressCurve = null; for (int i = 0; i < lines.Length; i++) { string line = lines[i]; if (!headerPassed) { headerPassed = line.IndexOf("BEGINNING OF DATA") > 0; expectNewStressCurve = true; } else if (line.Trim().Equals("") || line.StartsWith("#") || line.IndexOf("END OF FILE") > 0) { continue; } else if (expectNewStressCurve) { stressCurve = new StressCurve(); stressCurve.Name = line.Trim(); stressCurve.Description = line.Trim(); stressCurves.Add(stressCurve); expectHeader = true; expectNewStressCurve = false; } else if (expectHeader) { string[] words = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); counter = words.Length > 0 ? Convert.ToInt32(words[0]) : 0; stressCurve.NumberOfTest = words.Length > 2 ? Convert.ToInt32(words[2]) : 0; expectHeader = false; } else if (counter > 0) { string[] words = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); var sigmaTau = new SigmaTau(); sigmaTau.Sigma = words.Length > 0 ? Convert.ToDouble(words[0]) : 0; sigmaTau.Tau = words.Length > 1 ? Convert.ToDouble(words[1]) : 0; sigmaTau.TauCharacteristic = words.Length > 2 ? Convert.ToDouble(words[2]) : sigmaTau.Tau; sigmaTau.TauMean = words.Length > 3 ? Convert.ToDouble(words[3]) : sigmaTau.Tau; stressCurve.SigmaTaus.Add(sigmaTau); counter--; if (counter == 0) { expectNewStressCurve = true; } } } } }); return stressCurves; } } }