/// <summary> /// Tries the retrieve the value for a given record /// </summary> /// <param name="recordNumber">The record number.</param> /// <param name="returnValue">The return value.</param> /// <returns></returns> public bool TryGetValue(long recordNumber, out ColumnErrorDictionary returnValue) { // if we return true, th dictionary is not null Contract.Ensures(Contract.Result <bool>() == false || Contract.ValueAtReturn(out returnValue) != null); return(m_RowErrorCollection.TryGetValue(recordNumber, out returnValue)); }
/// <summary> /// Stores the error information in a single string /// </summary> /// <param name="columnErrors">The column errors.</param> /// <param name="columns">The columns.</param> /// <returns></returns> public static string ReadErrorInformation(ColumnErrorDictionary columnErrors, IList <string> columns) { if (columnErrors.Dictionary.Count == 0) { return(null); } var list = new List <Tuple <string, string> >(); // Now every column error foreach (var entry in columnErrors.Dictionary) { var colName = entry.Key >= 0 && columns.Count > entry.Key ? columns[entry.Key] : string.Empty; var start = 0; while (start < entry.Value.Length) { var end = entry.Value.IndexOf(cSeparator, start + 1); if (end == -1) { end = entry.Value.Length; } // Add one Line for each error in the column list.Add(new Tuple <string, string>(colName, entry.Value.Substring(start, end - start))); start = end + 1; } } return(BuildList(list)); }
/// <summary> /// Add a warning to the list of warnings /// </summary> /// <param name="sender"></param> /// <param name="args"></param> public virtual void Add(object sender, WarningEventArgs args) { if (CountRows >= m_MaxRows) { return; } if (!m_RowErrorCollection.TryGetValue(args.RecordNumber, out var columnErrorCollection)) { columnErrorCollection = new ColumnErrorDictionary(); m_RowErrorCollection.Add(args.RecordNumber, columnErrorCollection); } columnErrorCollection.Add(args.ColumnNumber, args.Message); }
public ReaderMapping(IDataRecord dataReader, bool addStartLine, bool addRecNum, bool addEndLine, bool addErrorField) { var fileReader = dataReader as IFileReader; if (fileReader != null) { ColumnErrorDictionary = new ColumnErrorDictionary(fileReader); } var readerColumns = new HashSet <string>(StringComparer.OrdinalIgnoreCase); var fieldCount = 0; for (var col = 0; col < dataReader.FieldCount; col++) { ImmutableColumn column; if (fileReader != null) { var icol = fileReader.GetColumn(col); if (icol is ImmutableColumn imcol) { column = imcol; } else { column = new ImmutableColumn(icol.Name, icol.ValueFormat, col, icol.Convert, icol.DestinationName, icol.Ignore, icol.Part, icol.PartSplitter, icol.PartToEnd, icol.TimePart, icol.TimePartFormat, icol.TimeZonePart); } } else { column = new ImmutableColumn(dataReader.GetName(col), new ImmutableValueFormat(dataReader.GetFieldType(col).GetDataType()), col); } m_ReaderColumnsAll.Add(column.Name); if (column.Ignore) { continue; } m_DateTableColumns.Add(column); readerColumns.Add(column.Name); m_Mapping.Add(col, fieldCount++); } // add fields if (addStartLine && !readerColumns.Contains(ReaderConstants.cStartLineNumberFieldName)) { DataTableStartLine = fieldCount++; m_DateTableColumns.Add(new ImmutableColumn(ReaderConstants.cStartLineNumberFieldName, new ImmutableValueFormat(DataType.Integer), DataTableStartLine)); } else { DataTableStartLine = -1; } if (addRecNum && !readerColumns.Contains(ReaderConstants.cRecordNumberFieldName)) { DataTableRecNum = fieldCount++; m_DateTableColumns.Add(new ImmutableColumn(ReaderConstants.cRecordNumberFieldName, new ImmutableValueFormat(DataType.Integer), DataTableRecNum)); } else { DataTableRecNum = -1; } if (addEndLine && !readerColumns.Contains(ReaderConstants.cEndLineNumberFieldName)) { DataTableEndLine = fieldCount++; m_DateTableColumns.Add(new ImmutableColumn(ReaderConstants.cEndLineNumberFieldName, new ImmutableValueFormat(DataType.Integer), DataTableEndLine)); } else { DataTableEndLine = -1; } if (addErrorField && !readerColumns.Contains(ReaderConstants.cErrorField)) { DataTableErrorField = fieldCount; m_DateTableColumns.Add(new ImmutableColumn(ReaderConstants.cErrorField, new ImmutableValueFormat(), DataTableErrorField)); } else { DataTableErrorField = -1; } }