Exemple #1
0
        private void EnsureSorted()
        {
            var timer = Stopwatch.StartNew();

            using var reader = new DataRecordReader(_options.Sorted);

            var charBuffer         = new char[Constants.ValueMaxLength];
            var counter            = new Counter();
            var fileLength         = reader.Length;
            var readerPositionPrev = 0L;
            var repeatsCount       = 0L;

            var dataRecordPrev = new DataRecord(long.MinValue, ReadOnlySpan <char> .Empty);

            foreach (var dataRecord in reader)
            {
                if (dataRecordPrev.CompareTo(dataRecord) == 1)
                {
                    Console.WriteLine($"Not sorted data in line {counter.LinesCount}");
                    return;
                }

                var readerPosition = reader.Position;
                if (readerPosition - readerPositionPrev > Constants.HundredMegabytes)
                {
                    ShowProgress(readerPosition, fileLength, timer.Elapsed.TotalSeconds);
                    readerPositionPrev = readerPosition;
                }

                if (dataRecordPrev.Value.Equals(dataRecord.Value, Constants.ValueComparison))
                {
                    repeatsCount++;
                }

                counter.SetMinMax(dataRecord.Number);
                counter.IncrementLineCount();

                dataRecordPrev = dataRecord.Copy(charBuffer);
            }

            Console.WriteLine();
            Console.WriteLine("Data is really sorted");
            Console.WriteLine($"Numbers between {counter.MinNumber} and {counter.MaxNumber}");
            Console.WriteLine($"Lines count {counter.LinesCount}");
            Console.WriteLine($"Repeats count {repeatsCount}");
        }
Exemple #2
0
        private void CompareWithSource()
        {
            var timer      = Stopwatch.StartNew();
            var sortedData = new Dictionary <string, List <long> >();

            using (var sortedReader = new DataRecordReader(_options.Sorted))
            {
                foreach (var sortedRecord in sortedReader)
                {
                    var key = new string(sortedRecord.Value);
                    if (!sortedData.TryGetValue(key, out var collection))
                    {
                        collection = new List <long>();
                        sortedData.Add(key, collection);
                    }

                    collection.Add(sortedRecord.Number);
                }
            }

            Console.WriteLine("Read sorted records complete");

            using (var sourceReader = new DataRecordReader(_options.Source))
            {
                foreach (var(expectedNumber, value) in sourceReader)
                {
                    var expectedKey = new string(value);
                    if (!sortedData.TryGetValue(expectedKey, out var actualNumbers))
                    {
                        Console.WriteLine($"Not found value '{expectedKey}' in sorted file");
                        return;
                    }

                    if (actualNumbers.Contains(expectedNumber))
                    {
                        continue;
                    }

                    Console.WriteLine($"Not found number {expectedNumber} of value '{expectedKey}' in sorted file");
                    return;
                }
            }
            Console.WriteLine($"All lines from source file exists in sorted file");
            Console.WriteLine($"Compare complete at {timer.Elapsed}");
        }