private void ExportCleanData(object parameter, string folderPath) { if (parameter is DataGrid dataGrid) { using (var streamWriter = new StreamWriter($"{folderPath}")) { foreach (var row in dataGrid.Items) { if (row is CleanDataEntity cleanRowData) { if ((IsShowDuplicatesChecked && cleanRowData.IsDuplicate) || IsCorruptValuesChecked && cleanRowData.ContainsSpecialCharacter) { continue; } for (var a = 0; a < cleanRowData.Data.Count; a++) { if (a == (cleanRowData.Data.Count - 1)) { streamWriter.Write(cleanRowData.Data.ElementAt(a).Value); } else { streamWriter.Write(cleanRowData.Data.ElementAt(a).Value); streamWriter.Write(","); } } streamWriter.Write("\n"); } } foreach (var duplicate in CleanDataItems.Where(x => x.IsDuplicate).Distinct()) { var count = 0; var colCount = duplicate.Data.Count; foreach (var column in duplicate.Data) { if (count == (colCount - 1)) { streamWriter.Write(column.Value); } else { streamWriter.Write(column.Value); streamWriter.Write(","); } count++; } streamWriter.Write("\n"); } } } IsModalVisible = false; }
private void OnShowPredictions(object parameter) { lock (_lockPredictionValuesObject) { if (parameter is DataGrid dataGrid && SelectedPredictionColumnIndex >= 0 && ColumnsDictionary.Any()) { PredictionValues = new List <Dictionary <int, string> >(); var selectedPredictionColumnKey = ColumnsDictionary.ElementAt(SelectedPredictionColumnIndex).Key; var distinctPredicitonValues = CleanDataItems.SelectMany(x => x.Data.Where(z => z.Key == selectedPredictionColumnKey)) .Select(c => c.Value).Distinct(); foreach (var prediction in distinctPredicitonValues) { var columns = new Dictionary <int, string>(); for (var colIndex = 0; colIndex < ColumnsDictionary.Count; colIndex++) { var keyValuePairs = CleanDataItems.Select(x => x.Data).Where(c => c.Values.Contains(prediction)); var allPredictionsForColumn = keyValuePairs.SelectMany(x => x).Where(c => c.Key == ColumnsDictionary.ElementAt(colIndex).Key) .GroupBy(z => z.Value) .OrderByDescending(v => v.Count()).FirstOrDefault(); if (allPredictionsForColumn != null) { foreach (var c in allPredictionsForColumn) { columns.Add(ColumnsDictionary.ElementAt(colIndex).Key, c.Value); break; } } } PredictionValues.Add(columns); } Application.Current.Dispatcher.Invoke(() => dataGrid.ItemsSource = PredictionValues); Application.Current.Dispatcher.Invoke(() => dataGrid.Columns.Clear()); var colCount = 0; foreach (var prediction in ColumnsDictionary) { Application.Current.Dispatcher.Invoke(() => dataGrid.Columns.Add(new DataGridTextColumn() { Header = prediction.Value, Binding = new Binding($".[{prediction.Key}]"), DisplayIndex = colCount })); colCount++; } } } }
private void CheckAndSetDuplicates() { if (IsShowDuplicatesChecked) { DuplicateCount = 0; var duplicateValues = CleanDataItems.Select(x => x).GroupBy(c => c.GetHashCode()).Where(x => x.Count() > 1); foreach (var duplicate in duplicateValues.SelectMany(x => x)) { duplicate.IsDuplicate = true; DuplicateCount++; } } }
private void ExecuteFunction(object parameter) { try { if (!string.IsNullOrEmpty(DynamicFunction) && parameter is DataGrid dataGrid) { var replaceColumnIndex = 0; var replaceColumnValue = string.Empty; foreach (var column in ColumnsDictionary) { if (DynamicFunction.Contains(column.Value)) { replaceColumnValue = column.Value; replaceColumnIndex = column.Key; } } var ingnoreFirstRow = false; foreach (var row in CleanDataItems) { if (ingnoreFirstRow) { var newFunction = DynamicFunction.Replace(replaceColumnValue, row.Data[replaceColumnIndex]); var returnValue = _dynamicFunctions.InvokeDynamicFunction(newFunction); if (returnValue is Exception exception) { throw exception; } else { row.Data[replaceColumnIndex] = returnValue.ToString(); } } ingnoreFirstRow = true; } CreateColumnsAndBindings(dataGrid, CleanDataItems.FirstOrDefault().Data.Count); } } catch (Exception ex) { _exceptionLogDataAccess.LogException(ex.ToString()); } }
private void ReadExcelData(DataGrid dataGrid) { try { using (var package = new ExcelPackage(new FileInfo(FileName))) { Application.Current.Dispatcher.Invoke(() => CleanDataItems.Clear()); CorruptValueCount = 0; var workbook = package.Workbook; foreach (var worksheet in workbook.Worksheets) { for (var row = 1; row <= worksheet.Dimension.Rows; row++) { var columnsList = new CleanDataEntity(); for (var column = 1; column <= worksheet.Dimension.Columns; column++) { var columnText = worksheet.Cells[row, column].Text; columnsList.Data.Add(column, columnText); if (IsCorruptValuesChecked && Regex.Match(columnText, $"{RegularExpression}").Success) { columnsList.ContainsSpecialCharacter = true; CorruptValueCount++; } } columnsList.Id = row; Application.Current.Dispatcher.Invoke(() => CleanDataItems.Add(columnsList)); if (IsLimitRowsChecked && RowReadLimit > 0 && row >= RowReadLimit) { break; } } CheckAndSetDuplicates(); CreateColumnsAndBindings(dataGrid, worksheet.Dimension.Columns); } } } catch (Exception ex) { _exceptionLogDataAccess.LogException(ex.ToString()); } }
private void ReadCSVFile(DataGrid dataGrid) { using (var streamReader = new StreamReader(FileName)) { Application.Current.Dispatcher.Invoke(() => CleanDataItems.Clear()); var columnsDictionary = new Dictionary <int, string>(); CorruptValueCount = 0; var columnCount = 0; var rowCount = 0; while (!streamReader.EndOfStream) { var line = streamReader.ReadLine(); var columns = line.Split(','); if (!string.IsNullOrEmpty(line) && line.Contains(",")) { var columnsList = new CleanDataEntity(); var colCount = 0; foreach (var column in columns) { columnsList.Data.Add(colCount, column); if (IsCorruptValuesChecked && Regex.Match(column, $"{RegularExpression}").Success) { columnsList.ContainsSpecialCharacter = true; CorruptValueCount++; } colCount++; } columnsList.Id = rowCount; Application.Current.Dispatcher.Invoke(() => CleanDataItems.Add(columnsList)); columnCount = colCount; } rowCount++; if (IsLimitRowsChecked && RowReadLimit > 0 && rowCount >= RowReadLimit) { break; } } CheckAndSetDuplicates(); CreateColumnsAndBindings(dataGrid, columnCount); } }
private void OnVisualiseColumnn() { if (SelectedVisualisationColumnIndex >= 0 && ColumnsDictionary.Any()) { try { SelectedColumnItemsCount = new ObservableCollection <KeyValuePair <string, int> >(); var selectedColumnKey = ColumnsDictionary.ElementAt(SelectedVisualisationColumnIndex).Key; var visualiseColumnData = CleanDataItems.SelectMany(x => x.Data).Where(c => c.Key == selectedColumnKey); foreach (var visualColumnData in visualiseColumnData.Select(x => x.Value).Distinct()) { Application.Current.Dispatcher.Invoke(() => SelectedColumnItemsCount.Add(new KeyValuePair <string, int>(visualColumnData, visualiseColumnData.Select(x => x).Where(c => string.Equals(c.Value, visualColumnData, StringComparison.OrdinalIgnoreCase)).Count()))); } } catch (Exception ex) { _exceptionLogDataAccess.LogException(ex.ToString()); } } }