Exemplo n.º 1
0
            private IReadOnlyList <string> GetNames(string line)
            {
                var names = new string[Indexes.Count - 1];

                MultithreadHelper.For(
                    Multithreaded,
                    0,
                    names.Length,
                    Iteration);

                return(names);

                void Iteration(int index)
                {
                    var start = Indexes[index] + 1;
                    var end   = Math.Min(
                        Indexes[index + 1],
                        line.Length);

                    var length = end - start;

                    var text = line.Substring(start, length);

                    names[index] = text.Trim();
                }
            }
Exemplo n.º 2
0
            public SourceListParser(
                string[] lines,
                bool multithreaded,
                bool verbose)
            {
                // Assign input parameters.
                Lines = lines ??
                        throw new ArgumentNullException(nameof(lines));

                Verbose       = verbose;
                Multithreaded = multithreaded;

                // Get start line for name list.
                LineNumber = StartLine;

                Indexes = GetIndexes(Lines[LineNumber]);
                Names   = GetNames(Lines[LineNumber++]);
                Formats = GetFormats(Lines[LineNumber++]);
                Units   = GetUnits(Lines[LineNumber++]);

                NullSpecifiers = Lines[LineNumber].StartsWith("|") ?
                                 GetNames(Lines[LineNumber++]) :
                                 new string[Names.Count];

                NameDictionary = CreateNameDictionary();

                var sources = new ISource[Lines.Length - LineNumber];

                MultithreadHelper.For(
                    Multithreaded,
                    0,
                    sources.Length,
                    Iteration);

                Sources = sources;

                if (verbose)
                {
                    Console.WriteLine();
                    Console.WriteLine(
                        "Total rows: {0}",
                        Sources.Count);
                }

                void Iteration(int index)
                {
                    sources[index] = ReadSource(Lines[index + LineNumber]);
                }
            }
Exemplo n.º 3
0
            private IReadOnlyList <Unit> GetUnits(string line)
            {
                var names = GetNames(line);

                var units = new Unit[names.Count];

                MultithreadHelper.For(
                    Multithreaded,
                    0,
                    units.Length,
                    Iteration);

                return(units);

                void Iteration(int index)
                {
                    units[index] = GetUnitFormat(names[index]);
                }
            }
Exemplo n.º 4
0
            private IReadOnlyList <ColumnFormat> GetFormats(string line)
            {
                var names = GetNames(line);

                var formats = new ColumnFormat[names.Count];

                MultithreadHelper.For(
                    Multithreaded,
                    0,
                    formats.Length,
                    Iteration);

                return(formats);

                void Iteration(int index)
                {
                    formats[index] = GetColumnFormat(names[index]);
                }
            }
Exemplo n.º 5
0
            private INameDictionary CreateNameDictionary()
            {
                var entries = new NameEntry[Names.Count];

                MultithreadHelper.For(
                    Multithreaded,
                    0,
                    entries.Length,
                    Iteration);

                if (Verbose)
                {
                    Console.WriteLine(
                        "Number of column entries: {0}",
                        entries.Length);

                    Console.WriteLine();
                    Console.WriteLine(
                        "Begin reading rows: Line {0}",
                        LineNumber + 1);
                }

                return(CreateNameDictionary(entries));

                void Iteration(int index)
                {
                    var name          = Names[index];
                    var format        = Formats[index];
                    var unit          = Units[index];
                    var nullSpecifier = NullSpecifiers[index];

                    entries[index] = CreateNameEntry(
                        name,
                        format,
                        unit,
                        nullSpecifier);
                }
            }
Exemplo n.º 6
0
        public ColumnList(SourceList sourceList, bool multithreaded, bool verbose)
        {
            SourceList = sourceList ??
                         throw new ArgumentNullException(nameof(sourceList));

            var keys = NameDictionary.Keys;
            var verboseOutputPadding = 0;

            if (verbose)
            {
                foreach (var key in keys)
                {
                    if (verboseOutputPadding < key.Length)
                    {
                        verboseOutputPadding = key.Length;
                    }
                }

                verboseOutputPadding += 2;
            }

            var columns = new Column[NameDictionary.Count];

            MultithreadHelper.For(
                multithreaded,
                0,
                columns.Length,
                Iteration);

            Columns = columns;

            void Iteration(int index)
            {
                var name   = NameDictionary.Keys[index];
                var entry  = NameDictionary.Entries[index];
                var column = SourceList.GetColumn(name);

                columns[index] = column;

                if (verbose)
                {
                    var sb = new StringBuilder("Added column \"");
                    sb.Append(index);
                    sb.Append('"');

                    if (entry.Units != Unit.None)
                    {
                        for (var i = name.Length; i < verboseOutputPadding; i++)
                        {
                            sb.Append(' ');
                        }

                        sb.Append('(');
                        sb.Append(entry.Units);
                        sb.Append(')');
                    }

                    Console.WriteLine(sb);
                }
            }
        }