コード例 #1
0
        public void CheckSortingOrder()
        {
            const int linesCountProgressToInform = 1000 * 1000 * 5;

            Console.WriteLine($"{DateTime.Now}. Started checking of output file for correct sorting.");

            int firstLineNumber = 1, secondLineNumber = 1;

            using (var fs = new FileStream(_filePathToCheck, FileMode.Open, FileAccess.Read, FileShare.Read))
            {
                using (var firstLineReader = new StreamReader(fs))
                {
                    bool isWrongSorting = false;

                    string firstLine  = firstLineReader.ReadLine();
                    string secondLine = null;
                    while (firstLine != null && (secondLine = firstLineReader.ReadLine()) != null)
                    {
                        secondLineNumber = firstLineNumber + 1;

                        if (!CorrectLinePattern.IsMatch(firstLine))
                        {
                            Console.WriteLine($"{DateTime.Now}. Wrong format of first line.");
                        }

                        if (!CorrectLinePattern.IsMatch(secondLine))
                        {
                            Console.WriteLine($"{DateTime.Now}. Wrong format of second line.");
                        }

                        var firstLinePart  = SortingManager.LinePreProcessingFunc(firstLine);
                        var secondLinePart = SortingManager.LinePreProcessingFunc(secondLine);

                        var result = _standardComparator.Compare(firstLinePart, secondLinePart);

                        if (result > 0)
                        {
                            // it seems that we have problem with sorting
                            isWrongSorting = true;

                            Console.WriteLine($"{DateTime.Now}. Lines are in incorrect order.");
                            Console.WriteLine($"{DateTime.Now}. First line: '{firstLine}'. Line number: {firstLineNumber}");
                            Console.WriteLine($"{DateTime.Now}. Second line: '{secondLine}'. Line number: {secondLineNumber}");
                        }

                        if (secondLineNumber % linesCountProgressToInform == 0)
                        {
                            Console.WriteLine($"{DateTime.Now}. Checked {secondLineNumber} lines");
                        }

                        firstLine       = secondLine;
                        firstLineNumber = secondLineNumber;
                    }

                    if (isWrongSorting)
                    {
                        Console.WriteLine($"{DateTime.Now}. Wrong sorting of lines or another problem.");
                    }
                    else
                    {
                        Console.WriteLine($"{DateTime.Now}. All lines sorted correctly and have correct output format.");
                    }
                }
            }

            Console.WriteLine($"{DateTime.Now}. Completed checking of output file for correct sorting.");
        }