public static Boolean TryParse(String path, Configuration aConfiguration, out WordList aWordList) { StreamReader fileIn = new StreamReader(path); Errors = new List <String>(); aWordList = new WordList(path, aConfiguration); // Split the original wordlist from the file and store it in a temporarily list String[] TempList = fileIn.ReadToEnd().Split(WordSeparators); // Find the first line in ".seq" for validation aWordList.Validation = new Validator(TempList[0]); // Clear the first line for (int i = 0; i < TempList.Length - 1; i++) { TempList[i] = TempList[i + 1]; } // Clear the last line TempList[TempList.Length - 1] = ""; // Use Lambda to append the list to originalList property aWordList.OriginalList = TempList.Where(s => !String.IsNullOrEmpty(s)).ToArray(); // Find out whether wordlist contains duplicated content String duplicate = Validator.ContainsDuplicates(aWordList.OriginalList); if (duplicate != "") { Errors.Add(String.Format(WordListErrors.DuplicateError, duplicate)); } // Check each field in the wordlist. int TotalScore = 0, TotalLength = 0, TotalASCII = 0, TotalHash = 0; foreach (String potentialWord in aWordList.OriginalList) { Validator line = new Validator(potentialWord); // If it goes to the last line if (String.IsNullOrEmpty(potentialWord)) { break; } TotalScore += line.Score; TotalLength += line.Length; TotalASCII += line.ASCII; TotalHash += line.Hash; // Check the word and word length if (line.Length > 0) { // Check that the field is alphabetic if (Regex.IsMatch(line.Word, Configuration.allowedCharacters)) { aWordList.Add(line); // Check if the actual length of word is equal to its pre-defined length if (line.Word.Length != line.Length) { Errors.Add(String.Format(WordListErrors.WordLengthError, line.Word, line.Length)); } /*if (line.Word.Length == line.Length) * aWordList.Add(line); * else * Errors.Add(String.Format(WordListErrors.WordLengthError, line.Word, line.Length));*/ } else { Errors.Add(String.Format(WordListErrors.AlphabeticError, line.Word, line.OriginalLine)); } // Check the word ASCII if (line.GetWordASCII() == line.ASCII) { //TotalASCII += line.ASCII; } else { Errors.Add(String.Format(WordListErrors.WordASCIIError, line.Word, line.ASCII)); } // Check the word Hash if ((line.Length + line.Score + line.ASCII) == line.Hash) { //TotalHash += line.Hash; } else { Errors.Add(String.Format(WordListErrors.WordHashError, line.OriginalLine, line.Hash)); } } else { if (line.Word.Length > 0) { Errors.Add(String.Format(WordListErrors.InvalidWordError, line.Word, line.OriginalLine)); } else { Errors.Add(String.Format(WordListErrors.MissingWordError, line.OriginalLine)); } } } // Compare the total values above and those in the first line in ".seq" if (TotalLength != aWordList.Validation.Length) { Errors.Add(String.Format(WordListErrors.TotalLengthError, TotalLength, aWordList.Validation.Length)); } if (TotalHash != aWordList.Validation.Hash) { Errors.Add(String.Format(WordListErrors.TotalHashError, TotalHash, aWordList.Validation.Hash)); } if (TotalScore != aWordList.Validation.Score) { Errors.Add(String.Format(WordListErrors.TotalScoreError, TotalScore, aWordList.Validation.Score)); } if (TotalASCII != aWordList.Validation.ASCII) { Errors.Add(String.Format(WordListErrors.TotalASCIIError, TotalASCII, aWordList.Validation.ASCII)); } // Check the minimmum word limit. if (aWordList.Count < aConfiguration.MinimumNumberOfUniqueWords) { Errors.Add(String.Format(WordListErrors.MinimumSizeError, aWordList.Count, aConfiguration.MinimumNumberOfUniqueWords)); } // Check the maximum word limit. if (aWordList.Count > aConfiguration.MaximumNumberOfUniqueWords) { Errors.Add(String.Format(WordListErrors.MaximumSizeError, aWordList.Count, aConfiguration.MaximumNumberOfUniqueWords)); } aWordList.Valid = Errors.Count == 0; return(aWordList.Valid); }