Esempio n. 1
0
 /// <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;
 }
Esempio n. 2
0
 /// <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);
 }
Esempio n. 4
0
        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);
        }