public static async Task <List <string> > GetCsvRows(CsvOptions options, CsvColumnFilter filter, int page, int pageSize) { if (options.FilePath.IsNullOrEmpty()) { throw new ArgumentException(@"File path is empty."); } if (FileReader?.Path != options.FilePath) { FileReader = FileEnumerable.ReadOnly(options.FilePath, options.Encoding).EnableBuffer(); } var rowEnumerable = FileReader .Reset() .Skip((page - 1) * pageSize) .Take(pageSize); if (!options.CommentSymbol.IsNullOrEmpty()) { rowEnumerable = rowEnumerable.Where(x => !x.StartsWith(options.CommentSymbol)); } if (!rowEnumerable.Any()) { return(new List <string>()); } List <string> rows; if (options.GetColumnNamesFromFirstRow && await rowEnumerable.HasMoreLinesThanAsync(1)) { var header = rowEnumerable.First(); if (filter?.IsValid(out var msg) ?? false) { rowEnumerable = rowEnumerable .Where(x => x.Split(options.Delimiter.Character)[filter.Index].WithCondition(filter.Keyword, filter.Condition)); } rows = await rowEnumerable.Skip(rowEnumerable.SkipAmount + 1).ToListAsync(); rows.Insert(0, header); return(rows); } if (filter?.IsValid(out var msg2) ?? false) { rowEnumerable = rowEnumerable .Where(x => x.Split(options.Delimiter.Character)[filter.Index].WithCondition(filter.Keyword, filter.Condition)); } rows = await rowEnumerable.ToListAsync(); return(rows); }
public void Thing() { var e = new FileEnumerable(); var files = e.GetFiles(); Assert.AreEqual(3, files.Count()); e.FileIsDeletedByDifferentProcess(); Assert.AreEqual(3, files.Count()); }
internal static void Demonstration() { using (var list = new FileEnumerable("Program.cs")) { foreach (var item in list) { Console.WriteLine(item); } } }
public void Thing() { var e = new FileEnumerable(); var files = e.GetFiles(); Assert.AreEqual(3, files.Count()); e.FileIsDeletedByDifferentProcess(); Assert.AreEqual(3, files.Count()); }
/// <summary> /// Open a <see cref="FileDialog"/> from the tool strip menu item. /// </summary> private async void OpenToolStripMenuItem_Click(object sender, EventArgs e) { StatusStripLabel.Text = Strings.SELECTING_FILE; var dialog = new OpenFileDialog { Filter = $@"{Strings.CSV_FILE}|*.csv|{Strings.TXT_FILE}|*.txt", RestoreDirectory = true }; if (dialog.ShowDialog() == DialogResult.OK) { Page = 1; StatusStripLabel.Text = string.Empty; Filter = new CsvColumnFilter(); KeywordTextBox.Text = ""; ColumnDropDown.SelectedIndex = -1; var delimiters = CsvOptions.Delimiters.Select(x => x.Character).ToList(); var fileName = dialog.FileName; var rows = FileEnumerable .ReadOnly(fileName) .Where(x => !x.StartsWith("//") && !x.StartsWith("#") && !x.IsNullOrEmpty()) .Take(10); try { var delimiter = rows.FindDelimiter(CsvOptions.Quotes.Select(x => x.Character), CsvOptions.Delimiters.Select(x => x.Character)); var index = delimiters.IndexOf(delimiter); DelimiterDropDown.SelectedIndex = index; } catch { StatusStripLabel.Text = Strings.UNABLE_TO_READ_DELIMITER; DelimiterDropDown.SelectedIndex = 0; } FileWatcher?.Dispose(); var fileInfo = new FileInfo(fileName); FileWatcher = new FileSystemWatcher(fileInfo.DirectoryName); FileWatcher.Changed += FileWatcherOnChanged; FileWatcher.EnableRaisingEvents = true; Options.FilePath = fileName; Text = $@"CsvViewer - {Options.FilePath}"; await LoadCsvData(); } }
public static async Task <int> CountColumnsAsync(CsvOptions options) { if (!options.IsValid()) { return(0); } if (FileReader?.Path != options.FilePath) { FileReader = FileEnumerable.ReadOnly(options.FilePath, options.Encoding).EnableBuffer(); } var row = await FileReader.FirstAsync(); return(row.Split(options.Delimiter.Character).Length); }
static public IEnumerable GetItemNames (string path, FileFilter filter) { FileEnumerable fe; fe = new FileEnumerable (path, filter, null); fe.NamesOnly = true; return fe; }
static public IEnumerable GetDirectoryNames (string path) { FileEnumerable fe; fe = new FileEnumerable (path, new FileFilter (IsDirectory), null); fe.NamesOnly = true; return fe; }