public static OmaReaderResult Read(string path) { IDictionary <OmaParameter, string> right = new Dictionary <OmaParameter, string>(); IDictionary <OmaParameter, string> left = new Dictionary <OmaParameter, string>(); string DO_VALUE = default; using (StreamReader sr = new StreamReader(path)) { for (string line = sr.ReadLine(); line != null; line = sr.ReadLine()) { if (ldsKeyRegex.IsMatch(line) && ldsKeyRegex.Match(line) is Match keyMatch && Enum.TryParse(keyMatch.Groups[1].Value, out OmaParameter key)) { if (ldsDoubleValueRegex.IsMatch(line) && ldsDoubleValueRegex.Match(line) is Match doubleValueMatch) { DictionaryUtils.SafeAdd(right, key, doubleValueMatch.Groups[1].Value); DictionaryUtils.SafeAdd(left, key, doubleValueMatch.Groups[2].Value); } else if (ldsSingleValueRegex.IsMatch(line) && ldsSingleValueRegex.Match(line) is Match singleValueMatch && singleValueMatch.Groups[1].Value is string value) { DictionaryUtils.SafeAdd(right, key, value); DictionaryUtils.SafeAdd(left, key, value); if (OmaParameter.DO.Equals(key)) { DO_VALUE = value; } } } } } OmaReaderResult result = default; switch (DO_VALUE) { case "B": result = new OmaReaderDoubleResult { Left = left, Right = right }; CheckRequiredParameters(left, side.LEFT); CheckRequiredParameters(right, side.RIGHT); break; case "L": result = new OmaReaderLeftResult { Result = left }; CheckRequiredParameters(left, side.LEFT); break; case "R": result = new OmaReaderRightResult { Result = right }; CheckRequiredParameters(right, side.RIGHT); break; default: throw new OmaException("Missing Required Parameter: DO", null, side.UNKNOWN, OmaStatusCode.MissingRequiredParameter); } return(result); }