private DataTable ReadData(TxtImportSettings settings, int maxRowsCount) { var fileName = settings.PathToFile; DataTable result; if (!File.Exists(fileName)) { result = new DataTable(); } else { switch (settings.FileType) { case TxtFileType.Delimited: result = GetPreviewForDelimitedFile(settings, maxRowsCount); break; case TxtFileType.FixedWidth: result = GetPreviewForFixedWidthFile(settings, maxRowsCount); break; default: result = new DataTable(); break; } } return(result); }
private static DataTable GetPreviewForDelimitedFile(TxtImportSettings settings, int maxRowsCount) { var fileName = settings.PathToFile; var result = new DataTable(); using (var streamReader = new StreamReader(fileName)) { while (streamReader.Peek() != -1 && (maxRowsCount < 0 || result.Rows.Count < maxRowsCount)) { var line = streamReader.ReadLine(); if (String.IsNullOrEmpty(line)) { continue; } var splitValues = line.Split(new[] { settings.Delimiter }, StringSplitOptions.RemoveEmptyEntries); if (splitValues.Length == 0) { continue; } if (result.Columns.Count == 0) { foreach (var splitValue in splitValues) { result.Columns.Add(splitValue); } } else { var row = result.NewRow(); var minColumn = Math.Min(splitValues.Length, result.Columns.Count); for (int i = 0; i < minColumn; i++) { row[i] = splitValues[i]; } result.Rows.Add(row); } } } return(result); }
public FormatOptionsPage(WizardContext context) { _settings = (TxtImportSettings)context.Settings; _importer = context.Importer; InitializeComponent(); // FileType combo box cmbFileType.DataSource = Enum.GetValues(typeof(TxtFileType)); cmbFileType.Format += delegate(object s, ListControlConvertEventArgs args) { args.Value = ((TxtFileType)args.ListItem).Description(); }; cmbFileType.SelectedValueChanged += CmbFileTypeOnSelectedValueChanged; cmbFileType.DataBindings.Clear(); cmbFileType.DataBindings.Add("SelectedItem", _settings, "FileType", true, DataSourceUpdateMode.OnPropertyChanged); // Delimiter _settings.Delimiter = delimiterSelector.CurrentDelimiter; delimiterSelector.CurrentDelimiterChanged += DelimiterSelectorOnCurrentDelimiterChanged; // CmbFileTypeOnSelectedValueChanged(cmbFileType, EventArgs.Empty); }
private static DataTable GetPreviewForFixedWidthFile(TxtImportSettings settings, int maxRowsCount) { var fileName = settings.PathToFile; var result = new DataTable(); int[] columnLengths = null; using (var streamReader = new StreamReader(fileName)) { while (streamReader.Peek() != -1 && (maxRowsCount < 0 || result.Rows.Count < maxRowsCount)) { var line = streamReader.ReadLine(); if (String.IsNullOrEmpty(line)) { continue; } if (columnLengths == null) { var columns = line.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries); if (columns.Length == 0) { continue; } columnLengths = new int[columns.Length]; foreach (var column in columns) { result.Columns.Add(column); } for (int i = columns.Length - 1; i >= 0; i--) { var lastIndex = line.LastIndexOf(columns[i], StringComparison.Ordinal); var columnLength = line.Length - lastIndex; columnLengths[i] = columnLength; line = line.Remove(lastIndex); } } else { var row = result.NewRow(); for (int i = 0; i < columnLengths.Length; i++) { if (line.Length == 0) { break; } var curLen = Math.Min(columnLengths[i], line.Length); var value = line.Substring(0, curLen).Trim(); row[i] = value; line = line.Substring(curLen); } result.Rows.Add(row); } } } return(result); }