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(); } }
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]); } }
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]); } }
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]); } }
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); } }
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); } } }