/// <summary> /// Reads a queryresult file, given a streamreader. /// </summary> /// <param name="reader">The streamreader.</param> /// <returns>The array with queryresult.</returns> public QueryResult[] ConvertFile(StreamReader reader) { if (reader == null) { throw new ArgumentNullException(nameof(reader)); } List <QueryResult> results = new List <QueryResult>(); using (CsvReader csv = CsvReader(reader)) { // Csv syntax for reading headers. csv.Read(); csv.ReadHeader(); // Read the header, to see which measures there are. string[] kNames = FilterHeader(csv); // Find the individual values. while (csv.Read()) { // Check to see if there is an entry here. if (!csv.TryGetField(MeshName, out string name)) { break; } QueryResult query = new QueryResult(name); foreach (string kName in kNames) { if (csv.TryGetField(kName, out string serialised) && QueryItem.TryParse(serialised, out QueryItem item)) { query.AddItem(item); } } //else break; results.Add(query); } } return(results.ToArray()); }