private void fileSelectBtn_Click(object sender, EventArgs e) { if (csvFileLoader.ShowDialog() == DialogResult.OK) { // Force disable the CheckBox useHeaderCheckbox.Enabled = false; useHeaderCheckbox.Checked = false; // Force disable Buttons startTrainingBtn.Enabled = false; showTreeBtn.Enabled = false; predictionsBtn.Enabled = false; // Clear any previous training data tree = null; trainingData = new Dataset(); CsvConfiguration config = new CsvConfiguration(CultureInfo.InvariantCulture) { HasHeaderRecord = false }; // Wrap all this code in a try-catch block to catch parsing errors try { // Read the contents of the file into a stream using (Stream fileStream = csvFileLoader.OpenFile()) using (StreamReader reader = new StreamReader(fileStream)) using (CsvReader csv = new CsvReader(reader, config)) { int maxFeatureCount = 0; // Read every line individually while (csv.Read()) { // Parse the current record var record = csv.GetRecord <dynamic>(); Row featureRow = Row.ParseFromCsv(record); if (featureRow != null) { trainingData.Add(featureRow); if (featureRow.Count > maxFeatureCount) { maxFeatureCount = featureRow.Count; } } } // Add default headers for (int i = 0; i < maxFeatureCount; ++i) { string header = $"Field{i + 1}"; trainingData.Headers.Add(header); } } // Get the path of the specified file csvFilePath = csvFileLoader.SafeFileName; fileNameLabel.Text = $"Seleccionado: {csvFilePath}"; // Display the fields in the UI CreateFieldsFromDataset(fieldsPanel, trainingData); // Reset the CheckBox state to enabled useHeaderCheckbox.Enabled = true; // Re-enable the training button startTrainingBtn.Enabled = true; } catch (Exception) { // This will catch any type of Exception (for now) // Clear any fields that were added fieldsPanel.Controls.Clear(); // Clear any changes made to trainingData trainingData.Clear(); // Inform the user parsing has failed string title = "¡Uh-oh!"; string message = "Ha sucedido un problema al intentar leer el archivo CSV. Revisa que este tenga una sintaxis válida."; _ = MessageBox.Show(message, title, MessageBoxButtons.OK, MessageBoxIcon.Error); } } }
public DecisionNode(Dataset dataset) { this.dataset = dataset; predictions = DecisionTree.GetClassCount(dataset); }