DataTable ReadDataFromTextFileManually(ExtendedFile file) { DataTable table = new DataTable(file.Name); if (!FileTypes.isTextFile(file)) { return(table); } var lines = File.ReadAllLines(file.File.FullName); var delimiter = Delimiters.GetDelimiterByHeader(lines.First()); var fileRows = SplitLines(lines, delimiter); var columns = fileRows.First() .Where(x => !string.IsNullOrWhiteSpace(x)) .Select(x => new DataColumn(x.TrimQuotes())).ToArray(); table.Columns.AddRange(columns); foreach (var fileRow in fileRows.Skip(1)) { var updatedRow = fileRow.Where(x => !string.IsNullOrWhiteSpace(x)).ToArray(); if (columns.Length == updatedRow.Length) { var newTableRow = table.NewRow(); for (int i = 0; i < table.Columns.Count; i++) { newTableRow[i] = updatedRow[i].TrimQuotes(); } table.Rows.Add(newTableRow); } } return(table); }
public static bool isTextFile(ExtendedFile file) => file.Type.Equals(TXT) || file.Type.Equals(CSV) || file.Type.Equals(TSV);
public PropertyItem GetProperty(IPropertyProvider providerList, ProcessorItem item, string propertyName) { if (!File.Exists(item.Value)) { return(null); } if (!Enum.TryParse(propertyName, true, out FileDetail detail)) { return(null); } string mime = MimeTypesMap.GetMimeType(item.Value); // HACK: Work out a better solution for file detail naming translation (e.g. width -> framewidth, if video, etc..) // Might be better being embedded in the ExtendedFile class. if (mime.StartsWith("video")) { if (detail == FileDetail.Width) { detail = FileDetail.FrameWidth; } else if (detail == FileDetail.Height) { detail = FileDetail.FrameHeight; } } else if (mime.StartsWith("image")) { if (detail == FileDetail.FrameWidth) { detail = FileDetail.Width; } else if (detail == FileDetail.FrameHeight) { detail = FileDetail.Height; } } if (!isBulkMode || file == null) { file = new ExtendedFile(item.Value); } dynamic value = file.GetExtendedProperty(detail); if (!isBulkMode) { file?.Dispose(); file = null; } if (value == null) { return(null); } if (value is string str) { return(new PropertyItem(str)); } else { double numericValue = Convert.ChangeType(value, typeof(double)); Enum unit = null; if (detail == FileDetail.Duration) { numericValue /= 10000; unit = DurationUnit.Millisecond; } else if (detail == FileDetail.TotalBitrate) { unit = BitRateUnit.BitPerSecond; } return(new PropertyItem(numericValue, unit)); } }
public static bool isExcelWorksheet(ExtendedFile file) => file.Type.Equals(XLS) || file.Type.Equals(XLSX);
public void End() { isBulkMode = false; file?.Dispose(); file = null; }