public static bool LoadRdmDictionary(string filename, out RdmFieldDictionary rdmDict, out string errorMsg) { var result = Task.Run(() => LoadRdmDictionaryAsync(filename)).Result; rdmDict = result.Item2; errorMsg = result.Item3; return(result.Item1); }
public static async Task <Tuple <bool, RdmFieldDictionary, string> > LoadRdmDictionaryAsync(string filename) { var rdmDict = new RdmFieldDictionary(); var errorMsg = string.Empty; if (!File.Exists(filename)) { errorMsg += $"\nCannot find file {filename}"; return(new Tuple <bool, RdmFieldDictionary, string>(false, rdmDict, errorMsg)); } try { using (var fs = File.OpenRead(filename)) using (var bs = new BufferedStream(fs)) using (var sr = new StreamReader(bs)) { string s; while ((s = await sr.ReadLineAsync()) != null) { if (s[0] != '!') { var splitStr = Regex.Matches(s, @"[\""].+?[\""]|[^ ]+") .Cast <Match>() .Select(column => column.Value) .ToList(); var isEnum = splitStr[4].Contains("ENUMERATED"); var entry = new RdmDictEntry(); entry.Acronym = splitStr[0]; entry.DDEAcronym = splitStr[1]; if (int.TryParse(splitStr[2], out var fid)) { entry.Fid = fid; } else { entry.Fid = 0; errorMsg += "\nUnable to get FID set it to 0 instead"; } entry.RipplesTo = splitStr[3]; entry.FieldType = splitStr[4]; if (isEnum) { var newLength = $"{splitStr[5]} {splitStr[6]} {splitStr[7]} {splitStr[8]}"; entry.Length = newLength; entry.RwfType = RwfStringToTypeEnum(splitStr[9]); if (int.TryParse(splitStr[10], out var rwfLen)) { entry.RwfLen = rwfLen; } else { entry.RwfLen = 0; errorMsg += "\nUnable to get RWFLEN set it to 0 instead"; } } else { entry.Length = splitStr[5]; entry.RwfType = RwfStringToTypeEnum(splitStr[6]); if (int.TryParse(splitStr[7], out var rwfLen)) { entry.RwfLen = rwfLen; } else { entry.RwfLen = 0; errorMsg += "\nUnable to get RWFLEN set it to 0 instead"; } } rdmDict.Add(entry.Fid, entry); } } } return(new Tuple <bool, RdmFieldDictionary, string>(true, rdmDict, errorMsg)); } catch (Exception ex) { errorMsg += $"\n{ex.Message}\n{ex.StackTrace}"; return(new Tuple <bool, RdmFieldDictionary, string>(false, rdmDict, errorMsg)); } }