Example #1
0
        public static ImportFileResult ImportFile(string _filename, TaxonSearch _searchTool, bool _logFoundTaxon = true)
        {
            ImportFileResult result = new ImportFileResult();

            List <string> notFound = new List <string>();
            List <Tuple <string, TaxonTreeNode> > found = new List <Tuple <string, TaxonTreeNode> >();

            using (StreamReader file = new StreamReader(_filename))
            {
                string line;
                while ((line = file.ReadLine()) != null)
                {
                    if (string.IsNullOrWhiteSpace(line))
                    {
                        continue;
                    }

                    TaxonTreeNode node = _searchTool.FindOne(line);
                    if (node == null)
                    {
                        notFound.Add(line);
                    }
                    else
                    {
                        found.Add(new Tuple <string, TaxonTreeNode>(line, node));
                    }
                }
            }

            result.LogFilename = _filename.Replace(".txt", "") + "_import.log";
            using (StreamWriter log = new StreamWriter(result.LogFilename))
            {
                log.WriteLine("Import " + _filename + " results");
                log.WriteLine("");
                log.WriteLine(found.Count + " taxons found");
                log.WriteLine(notFound.Count + " taxons not found");
                log.WriteLine("");
                log.WriteLine("Not found:");
                foreach (string name in notFound)
                {
                    log.WriteLine("    " + name);
                }
                log.WriteLine("");
                if (_logFoundTaxon)
                {
                    log.WriteLine("Found:");
                    foreach (Tuple <string, TaxonTreeNode> tuple in found)
                    {
                        log.WriteLine("    " + tuple.Item1 + " ==> " + tuple.Item2.GetHierarchicalName());
                    }
                }
                log.WriteLine("");
            }

            result.TaxonsFound   = found.Count;
            result.TaxonNotFound = notFound.Count;
            Dictionary <TaxonTreeNode, bool> dico = new Dictionary <TaxonTreeNode, bool>();

            foreach (Tuple <string, TaxonTreeNode> tuple in found)
            {
                if (dico.ContainsKey(tuple.Item2))
                {
                    continue;
                }
                dico[tuple.Item2] = true;
            }
            result.List = dico.Keys.ToList();
            return(result);
        }