// get the total number of columns
        public int Get_Number_Of_Columns(String InputFile)
        {
            CsvUtils cu = new CsvUtils();

            cu.SetFile(InputFile);
            return(cu.Get_Number_Of_Columns());
        }
        // Rearranges columns to enforce a particular order
        public Boolean Enforce_Column_Order(String InputFile, String ColumnOrderTemplate)
        {
            CsvUtils cu = new CsvUtils();

            cu.SetFile(InputFile);
            String[] ColNames = ColumnOrderTemplate.Split(',');
            IDictionary <int, List <String> > NewDict = new Dictionary <int, List <String> >();
            List <string> AllColumnNameFromTemplate   = new List <string>();
            List <int>    Order = new List <int>();

            foreach (String s in ColNames)
            {
                AllColumnNameFromTemplate.Add(s.Trim());
                // Console.WriteLine("Debug, adding:" + s.Trim());
            }
            int NumberOfColumnsInParameters = AllColumnNameFromTemplate.Count();
            int NumberOfColumnsInCsv        = cu.Get_Number_Of_Columns();

            if (NumberOfColumnsInParameters != NumberOfColumnsInCsv)
            {
                // Number of Columns in parameter passed is different from number of columns in CSV
                return(false);
            }

            //Console.WriteLine("sdf:" + NumberOfColumnsInParameters + ":" + NumberOfColumnsInCsv);
            //Console.ReadKey();

            foreach (String Col in AllColumnNameFromTemplate)
            {
                if (cu.Get_Column_Index(Col) < 0)
                {
                    return(false);
                }
                Order.Add(cu.Get_Column_Index(Col));
            }

            foreach (KeyValuePair <int, List <String> > entry in cu.dict)
            {
                List <String> result1 = Order.Select(i => entry.Value[i]).ToList();
                NewDict.Add(entry.Key, result1);
            }
            cu.dict = NewDict;
            cu.Save_File_As_CSV(InputFile);
            return(true);
        }