/// <summary> /// Конструктор класса. Инициализирует строковые данные для шаблона и конкретезирующий правила сравнения для строк /// </summary> public KeyTextFileMaker(IEnumerable <string> patternWords, IWordComparator comparator) { if (patternWords == null) { throw new ArgumentNullException(nameof(patternWords), "Значение не может быть null"); } if (comparator == null) { throw new ArgumentNullException(nameof(patternWords), "Значение не может быть null"); } this.patternWords = patternWords; this.comparator = comparator; }
/// <summary> /// Метод, заполняющий лист стаистики вхождения слов для одного файла. /// </summary> /// <param name="sourceFiles">Данные с текущего считанного файла</param> /// <param name="pathToTheComparedFile">Полное име текущего считанного файла</param> private static void CreateSingleStats(IEnumerable <string> sourceFiles, IWordComparator wordComparator, string pathToTheComparedFile) { for (int i = 0; i < patternParsingData.Count(); i++) { var currentStats = new WordStats(pathToTheComparedFile, patternParsingData.ElementAt(i), 0); wordStats.Add(currentStats); foreach (var word in sourceFiles) { if (wordComparator.CompareWords(word, patternParsingData.ElementAt(i))) { wordStats[i].Count++; } } } }
public bool GetValidate(IEnumerable <string> patternWords, IWordComparator comparator) { if (patternWords == null) { throw new ArgumentNullException(nameof(patternWords), "Значение не может быть null"); } for (int i = 0; i < patternWords.Count() - 1; i++) { for (int j = i + 1; j < patternWords.Count(); j++) { if (comparator.CompareWords(patternWords.ElementAt(i), patternWords.ElementAt(j))) { return(false); } } } return(true); }
static void Main(string[] args) { var provader = CodePagesEncodingProvider.Instance; Encoding.RegisterProvider(provader); bool isValidInputData = false; ShowMessageBox(AppMessages.greetingTile, ConsoleColor.DarkCyan); while (!isValidInputData) { ShowMessageBox(AppMessages.requestForInputSourceFiles); string pathToFolder = Console.ReadLine(); try { InitialSourceFilesDirectory(pathToFolder); isValidInputData = true; } catch (Exception ex) { ShowMessageBox(ex.Message, ConsoleColor.DarkRed); } } isValidInputData = false; while (!isValidInputData) { ShowMessageBox(AppMessages.requestForInputKeyFile); string fullFilename = Console.ReadLine(); try { InitialKeyFullFilename(fullFilename); isValidInputData = true; } catch (Exception ex) { ShowMessageBox(ex.Message, ConsoleColor.DarkRed); } } isValidInputData = false; while (!isValidInputData) { ShowMessageBox(AppMessages.requestForSelectCase); var keyPressed = Console.ReadKey(true); if (keyPressed.Key == ConsoleKey.D0 || keyPressed.Key == ConsoleKey.NumPad0) { ignoreCase = false; isValidInputData = true; } else if (keyPressed.Key == ConsoleKey.D1 || keyPressed.Key == ConsoleKey.NumPad1) { ignoreCase = true; isValidInputData = true; } } ShowMessageBox(AppMessages.waitValidation); isValidInputData = false; while (!isValidInputData) { try { keyFileEncoding = FileEncoding.DetectFileEncoding(fullKeyFilename); var parserRuls = new ReadOnlyWords(fullKeyFilename, keyFileEncoding); var patternParsing = new TextParseAndRead(parserRuls); patternParsingData = patternParsing.ReadByRules(parserRuls); wordComparisonRules = new TwoWordsComparator(ignoreCase); var patternMaker = new KeyTextFileMaker(patternParsingData, wordComparisonRules); var validatePattern = new ValidateKeyFileOnlyUniqueWords(); if (patternMaker.ValidateKeyFile(validatePattern)) { isValidInputData = true; } else { ShowMessageBox(AppMessages.failureValidation, ConsoleColor.DarkRed); ShowMessageBox(AppMessages.requestForInputKeyFile); string fullFilename = Console.ReadLine(); InitialKeyFullFilename(fullFilename); } } catch (Exception ex) { Console.WriteLine(ex.Message); } } ShowMessageBox(AppMessages.successValidation, ConsoleColor.DarkGreen); ShowMessageBox(AppMessages.comparingWait); totalStats = new List <IList <WordStats> >(); foreach (var currentFile in fullSourceFilenames) { try { if (currentFile == fullKeyFilename) { continue; } sourceFileEncoding = FileEncoding.DetectFileEncoding(currentFile); var parserRuls = new ReadOnlyWords(currentFile, sourceFileEncoding); var sourceParsing = new TextParseAndRead(parserRuls); ShowMessageBox(AppMessages.fileIsReadNow + $"{currentFile}"); sourceParsingData = sourceParsing.ReadByRules(parserRuls); wordStats = new List <WordStats>(); CreateSingleStats(sourceParsingData, wordComparisonRules, currentFile); totalStats.Add(wordStats); } catch (Exception ex) { Console.WriteLine(ex.Message); } } isValidInputData = false; while (!isValidInputData) { ShowMessageBox(AppMessages.requestForOutputStatistic); var keyPressed = Console.ReadKey(true); if (keyPressed.Key == ConsoleKey.D0 || keyPressed.Key == ConsoleKey.NumPad0) { isGeneralStatistic = false; isValidInputData = true; } else if (keyPressed.Key == ConsoleKey.D1 || keyPressed.Key == ConsoleKey.NumPad1) { isGeneralStatistic = true; isValidInputData = true; } } isValidInputData = false; while (!isValidInputData) { try { ShowMessageBox(AppMessages.requestForShowStatistic); var keyPressed = Console.ReadKey(true); if (keyPressed.Key == ConsoleKey.D0 || keyPressed.Key == ConsoleKey.NumPad0) { ShowMessageBox(AppMessages.requestForFileNameStats); var pathToSave = Console.ReadLine(); SelectOutputType(new WriteInFile(pathToSave, keyFileEncoding), isGeneralStatistic); isValidInputData = true; } else if (keyPressed.Key == ConsoleKey.D1 || keyPressed.Key == ConsoleKey.NumPad1) { SelectOutputType(new WriteInCansole(), isGeneralStatistic); isValidInputData = true; } } catch (Exception ex) { Console.WriteLine(ex.Message); } } ShowMessageBox(AppMessages.endSession); }