Index: Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/WaveConditionsCalculationParser.cs =================================================================== diff -u -r5cdaf6a62202805aa0abe5636e372a66b1bec723 -rfb6c8cb473282ccd9b920afddb33a2284c7274cd --- Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/WaveConditionsCalculationParser.cs (.../WaveConditionsCalculationParser.cs) (revision 5cdaf6a62202805aa0abe5636e372a66b1bec723) +++ Ringtoets/HydraRing/src/Ringtoets.HydraRing.Calculation/Parsers/WaveConditionsCalculationParser.cs (.../WaveConditionsCalculationParser.cs) (revision fb6c8cb473282ccd9b920afddb33a2284c7274cd) @@ -19,41 +19,32 @@ // Stichting Deltares and remain full property of Stichting Deltares at all times. // All rights reserved. -using System.Collections.Generic; using System.Globalization; using System.IO; -using System.Linq; using Ringtoets.HydraRing.Calculation.Data.Output; using Ringtoets.HydraRing.Calculation.Services; namespace Ringtoets.HydraRing.Calculation.Parsers { /// - /// Class for parsing wave condition results from a wave conditions calculation calculation. + /// Class for parsing wave condition results from a wave conditions calculation. /// public class WaveConditionsCalculationParser : IHydraRingFileParser { - private const string qVariantStart = "Submechanism = Q-variant"; - private const string waveAngle = "Wave angle"; - private const string waveHeight = "Wave height"; - private const string wavePeakPeriod = "Wave period"; - private const string reductionFactor = "reduction factor"; + private const string waveAngleText = "Wave angle"; + private const string waveHeightText = "Wave height"; + private const string wavePeakPeriodText = "Wave period"; + private const string reductionFactorText = "reduction factor"; private const char equalsCharacter = '='; - private readonly List results; + private double? waveAngle; + private double? waveHeight; + private double? wavePeakPeriod; /// - /// Creates a new instance of . + /// Gets the output that was parsed from the output file. /// - public WaveConditionsCalculationParser() - { - results = new List(); - } - - /// - /// Gets the output that was parsed form the output file. - /// public WaveConditionsCalculationOutput Output { get; private set; } public void Parse(string workingDirectory, int sectionId) @@ -73,14 +64,9 @@ private void SetOutput() { - if (results != null && results.Any()) + if (waveAngle != null && waveHeight != null && wavePeakPeriod != null) { - var finalResult = results.Last(); - - if (finalResult != null) - { - Output = new WaveConditionsCalculationOutput(finalResult.WaveHeight, finalResult.WavePeakPeriod, finalResult.WaveAngle); - } + Output = new WaveConditionsCalculationOutput(waveHeight.Value, wavePeakPeriod.Value, waveAngle.Value); } } @@ -93,65 +79,48 @@ while (!file.EndOfStream) { string currentLine = file.ReadLine(); - TryParseQVariant(currentLine, file); + + waveAngle = TryParseWaveAngle(currentLine) ?? waveAngle; + waveHeight = TryParseWaveHeight(currentLine) ?? waveHeight; + wavePeakPeriod = TryParseWavePeakPeriod(currentLine) ?? wavePeakPeriod; } } } } - private void TryParseQVariant(string startLine, StreamReader file) + private static double? TryParseWaveAngle(string line) { - if (startLine.Contains(qVariantStart)) + if (line.Contains(waveAngleText) && !line.Contains(reductionFactorText)) { - var result = new Result(); - while (!file.EndOfStream) - { - string readLine = file.ReadLine(); - TryParseWaveAngle(readLine, result); - TryParseWaveHeight(readLine, result); - TryParseWavePeakPeriod(readLine, result); - } - results.Add(result); - } - } - - private void TryParseWaveAngle(string line, Result result) - { - if (line.Contains(waveAngle) && !line.Contains(reductionFactor)) - { string resultAsString = line.Split(equalsCharacter)[1].Trim(); - result.WaveAngle= ParseStringResult(resultAsString); + return ParseStringResult(resultAsString); } + return null; } - private void TryParseWaveHeight(string line, Result result) + private static double? TryParseWaveHeight(string line) { - if (line.Contains(waveHeight)) + if (line.Contains(waveHeightText)) { string resultAsString = line.Split(equalsCharacter)[1].Trim(); - result.WaveHeight = ParseStringResult(resultAsString); + return ParseStringResult(resultAsString); } + return null; } - private void TryParseWavePeakPeriod(string line, Result result) + private static double? TryParseWavePeakPeriod(string line) { - if (line.Contains(wavePeakPeriod)) + if (line.Contains(wavePeakPeriodText)) { string resultAsString = line.Split(equalsCharacter)[1].Trim(); - result.WavePeakPeriod = ParseStringResult(resultAsString); + return ParseStringResult(resultAsString); } + return null; } private static double ParseStringResult(string resultAsString) { return double.Parse(resultAsString, CultureInfo.InvariantCulture); } - - private class Result - { - public double WaveHeight { get; set; } - public double WavePeakPeriod { get; set; } - public double WaveAngle { get; set; } - } } } \ No newline at end of file