Esempio n. 1
0
        public void MakeFile(CsvSet set)
        {
            decimal rowCount      = set.OutputRows.Count();
            decimal rowProccessed = 0.0m;
            decimal percentDone   = 0.0m;

            try
            {
                using (StreamWriter output = new StreamWriter(set.FilePath + "\\" + set.FileName + ".csv"))
                {
                    output.WriteLine(String.Join(",", set.Columns));

                    foreach (var row in set.OutputRows)
                    {
                        var previousPercent = percentDone;
                        output.WriteLine(row);
                        rowProccessed += 1;

                        percentDone = PercentageCounter(rowProccessed, rowCount, previousPercent);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
Esempio n. 2
0
        public CsvSet MapSets(List <CsvSet> dataSets, CsvSet ResultDataSet)
        {
            decimal rowCount       = GetJobCount(dataSets);
            decimal rowsProccessed = 0.0m;
            decimal percentDone    = 0.0m;

            Console.WriteLine($"{0.00}% Done"); //move later


            foreach (var ds in dataSets)
            {
                string       row;
                StreamReader file = new StreamReader(ds.FilePath);
                file.ReadLine();

                while ((row = file.ReadLine()) != null)
                {
                    string[] rowArray   = new string[ResultDataSet.Columns.Length];
                    Regex    CSVParser  = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");
                    var      attributes = CSVParser.Split(row);

                    foreach (var r in ds.MapRules)
                    {
                        rowArray[r[1]] = attributes[r[0]];
                    }

                    ResultDataSet.OutputRows.Add(string.Join(",", rowArray));
                    rowsProccessed += 1;
                    var previousPercent = percentDone;
                    percentDone = PercentageCounter(rowsProccessed, rowCount, previousPercent);
                }
                file.Close();
            }

            return(ResultDataSet);
        }
Esempio n. 3
0
        public void Run()
        {
            CsvSet        outputDataSet  = new CsvSet();
            List <CsvSet> dataSets       = new List <CsvSet>();
            var           path           = Directory.GetCurrentDirectory();
            var           dataSetsPath   = path + @"\DataSets";
            string        newDataSetName = "";

            bool directoryExists = Directory.Exists(path + @"\DataSets");

            if (!directoryExists)
            {
                try
                {
                    Directory.CreateDirectory(path + "\\DataSets");
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }
            }

            Console.WriteLine("Welcome to the .csv generator tool, this tool is used to merge disparate data sets \n" +
                              "into a .arff file for use in the Weka data analysis program.");

            Console.WriteLine("\n Please specify the name of the dataset you would like to create \n" +
                              "***WARNING DO NOT INCLUDE FILE EXTENSION IN NAME***\n" +
                              "***WARNING DO NOT INCLUDE THE FOLLOWING CHARACTERS IN THE FILE NAME***\n" +
                              "* . \" / \\ [ ] : ; | ,\n");

            Console.Write("New DataSet Name --> ");

            Regex regex1 = new Regex(@"^[a-zA-Z0-9_]+$");

            while (true)
            {
                newDataSetName = Console.ReadLine();

                if (!regex1.IsMatch(newDataSetName))
                {
                    Console.WriteLine("Please make sure your dataset name does not contain illegal characters.\n");
                    Console.Write("New DataSet Name -->");
                }
                else
                {
                    CsvSet dataSet = new CsvSet();
                    dataSet.FileName = newDataSetName;

                    Console.WriteLine("\nPlease List the Column Names seperated by commas.");
                    var columnNames = Console.ReadLine();
                    dataSet.Columns = columnNames.Split(",");
                    Console.WriteLine($"\nA data set with the name of {dataSet.FileName} containing the columns {columnNames} \n" +
                                      $"will be generated. Do you wish to continue?");
                    Console.WriteLine("\n[Y/N]?");
                    while (true)
                    {
                        var input = Console.ReadLine().ToUpper();
                        if (input.Equals("Y"))
                        {
                            Console.Clear();
                            outputDataSet = dataSet;
                            break;
                        }
                        else if (input.Equals("N"))
                        {
                            System.Environment.Exit(1);
                        }
                    }
                    break;
                }
            }

            var dataSetsContents = new DirectoryInfo(dataSetsPath);

            Console.WriteLine("Current Contents of DataSets folder\n");
            var filenames = dataSetsContents.EnumerateFiles();

            var fileList = _helper.FormatDataSetsList(filenames);// FormatDataSetsList(filenames);

            Console.WriteLine(fileList);

            Console.WriteLine("If contents blank, please make sure to copy over the datasets you \n" +
                              $"wish to merge into the DataSets folder located in {path + @"\DataSets"}.\n");

            Console.WriteLine("Please list the data sets you wish to merge seperated by commas.\n");


            do
            {
                var mergeSets = Console.ReadLine();

                var sets = mergeSets.Split(",");

                if (_helper.ValidateSets(dataSetsPath, sets))
                {
                    foreach (var s in sets)
                    {
                        CsvSet dataSet = new CsvSet();
                        dataSet.FileName = s;
                        dataSet.FilePath = dataSetsPath + $@"\{s}";

                        dataSets.Add(dataSet);
                    }

                    break;
                }
                else
                {
                    Console.WriteLine("Please make sure the files you specify exist, and are spelled correctly.\n");
                    Console.WriteLine(fileList);
                    Console.WriteLine("Please list the data sets you wish to merge seperated by commas.\n");
                }
            } while (true);

            dataSets = _helper.LoadDataSets(dataSets);

            foreach (var ds in dataSets)
            {
                Console.Clear();
                Console.WriteLine($"Please map which columns from dataset {ds.FileName} you want \n" +
                                  $"to the correct column on {outputDataSet.FileName}.");
                foreach (var c in ds.Columns)
                {
                    foreach (var oc in outputDataSet.Columns)
                    {
                        if (_helper.DoesRuleExist(ds, Array.IndexOf(outputDataSet.Columns, oc)))
                        {
                            continue;
                        }
                        else
                        {
                            Console.WriteLine("\n");
                            Console.WriteLine($"Map [{ds.FileName}] column \"{c}\" --> [{outputDataSet.FileName}] column \"{oc}\"?");
                            Console.WriteLine("\n");
                            Console.WriteLine("[Y,N]?");
                        }

                        var input = Console.ReadLine().ToUpper();
                        while (true)
                        {
                            if (input.Equals("Y"))
                            {
                                int[] rule = { Array.IndexOf(ds.Columns, c), Array.IndexOf(outputDataSet.Columns, oc) };
                                ds.MapRules.Add(rule);
                                break;
                            }
                            else if (input.Equals("N"))
                            {
                                break;
                            }
                            else
                            {
                                Console.WriteLine("Invalid input.");
                            }
                        }
                        if (input.Equals("Y"))
                        {
                            break;
                        }
                    }
                }
            }

            outputDataSet = _helper.MapSets(dataSets, outputDataSet);

            Console.WriteLine("\nData is ready to be coppied into file format.");

            while (true)
            {
                Console.WriteLine("\nPlease input the Directory where you would like the file to be output.");
                var outPutDirectory = Console.ReadLine();
                if (!Directory.Exists(outPutDirectory))
                {
                    Console.Beep();
                    Console.WriteLine("\nInvalid Directory." +
                                      "\nPlease ensure that the directoy exists and is spelled correctly.");
                }
                else
                {
                    outputDataSet.FilePath = outPutDirectory;
                    _helper.MakeFile(outputDataSet);
                    break;
                }
            }

            Console.WriteLine("File Successfully created\n" +
                              "\n" +
                              "Press any key to terminate.");
            Console.ReadKey();
            System.Environment.Exit(1);
        }
Esempio n. 4
0
 public bool DoesRuleExist(CsvSet set, int rule)
 {
     return(set.MapRules.Any(r => r[1] == rule));
 }