/// <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));
 }
Beispiel #2
0
        /// <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);
        }
Beispiel #4
0
        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;
            }
        }