/// <summary> /// Parse data based on options. /// </summary> /// <param name="options">options</param> /// <param name="sort">sort function used to sort features</param> /// <returns>Sorted feature names</returns> public List <string> Parse(SimpleDataTableBuilderOptions options, Action <List <string> > sort) { Clear(); var format = new FeatureItemGroupXmlFormat(); this.AddRange(from file in options.GetCountFiles() let xmlfile = file.File.EndsWith(".xml") ? file.File : file.File + ".mapped.xml" select new MappedCountItem() { ItemName = file.Name, NameGroupMap = (from m in format.ReadFromFile(xmlfile) from n in m select new FeatureItemGroup(n)).ToDictionary(m => m.Name) }); var names = (from countItem in this from featureName in countItem.NameGroupMap.Keys select featureName).Distinct().ToList(); sort(names); Console.WriteLine("merging subjects with identical queries..."); for (int i = names.Count - 1; i >= 0; i--) { for (int j = i - 1; j >= 0; j--) { if (this.All(m => HasSameQuery(m.NameGroupMap, names[j], names[i]))) { this.ForEach(m => MergeGroup(m.NameGroupMap, names[j], names[i])); Console.WriteLine("Merge " + names[i] + " into " + names[j]); } } } Console.WriteLine("merging subjects with identical queries done."); this.ForEach(m => m.InitializeDisplayNameMap()); var result = (from m in this from n in m.DisplayNameGroupMap.Keys select n).Distinct().ToList(); sort(result); return(result); }
public MappedPositionBuilder(SimpleDataTableBuilderOptions options) { this.options = options; }
public MappedCountTableBuilder(SimpleDataTableBuilderOptions options) { this.options = options; }