Exemple #1
0
        public ChoFieldValueTrimOption GetFieldValueTrimOption(Type fieldType, ChoFieldValueTrimOption?recordLevelFieldValueTrimOption)
        {
            ChoFieldValueTrimOption?fieldValueTrimOption = FieldValueTrimOption;

            if (fieldValueTrimOption != null)
            {
                return(fieldValueTrimOption.Value);
            }

            if (recordLevelFieldValueTrimOption != null)
            {
                return(recordLevelFieldValueTrimOption.Value);
            }

            if (fieldType == typeof(int) ||
                fieldType == typeof(uint) ||
                fieldType == typeof(long) ||
                fieldType == typeof(ulong) ||
                fieldType == typeof(short) ||
                fieldType == typeof(ushort) ||
                fieldType == typeof(byte) ||
                fieldType == typeof(sbyte) ||
                fieldType == typeof(float) ||
                fieldType == typeof(double) ||
                fieldType == typeof(decimal) ||
                fieldType == typeof(Single)
                )
            {
                return(ChoFieldValueTrimOption.TrimStart);
            }
            else
            {
                return(ChoFieldValueTrimOption.TrimEnd);
            }
        }
Exemple #2
0
        public ChoFieldValueTrimOption GetFieldValueTrimOptionForRead(Type fieldType, ChoFieldValueTrimOption?recordLevelFieldValueTrimOption)
        {
            ChoFieldValueTrimOption?fieldValueTrimOption = FieldValueTrimOption;

            if (fieldValueTrimOption != null)
            {
                return(fieldValueTrimOption.Value);
            }
            else
            {
                return(recordLevelFieldValueTrimOption != null ? recordLevelFieldValueTrimOption.Value : ChoFieldValueTrimOption.Trim);
            }
        }
        public ChoFieldValueTrimOption GetFieldValueTrimOptionForRead(Type fieldType)
        {
            ChoFieldValueTrimOption?fieldValueTrimOption = FieldValueTrimOption;

            if (fieldValueTrimOption != null)
            {
                return(fieldValueTrimOption.Value);
            }
            else
            {
                return(ChoFieldValueTrimOption.Trim);
            }
        }
Exemple #4
0
        private string NormalizeFieldValue(string fieldName, string fieldValue, int?size, bool truncate, bool?quoteField,
                                           ChoFieldValueJustification fieldValueJustification, char fillChar, bool isHeader = false, string nullValue = null,
                                           ChoFieldValueTrimOption?fieldValueTrimOption = null)
        {
            string lFieldValue = fieldValue;
            bool   retValue    = false;

            if (retValue)
            {
                return(lFieldValue);
            }

            if (fieldValue.IsNull())
            {
                fieldValue = String.Empty;
            }
            bool quoteValue = quoteField != null ? quoteField.Value : false;

            if (quoteField == null || !quoteField.Value)
            {
                if (fieldValue.StartsWith(Configuration.QuoteChar.ToString()) && fieldValue.EndsWith(Configuration.QuoteChar.ToString()))
                {
                }
                else
                {
                    if (fieldValue.Contains(Configuration.EOLDelimiter))
                    {
                        if (isHeader)
                        {
                            throw new ChoParserException("Field header '{0}' value contains EOL delimiter character.".FormatString(fieldName));
                        }
                        else
                        {
                            quoteValue = true;
                        }
                    }
                }
            }
            else
            {
                if (fieldValue.StartsWith(Configuration.QuoteChar.ToString()) && fieldValue.EndsWith(Configuration.QuoteChar.ToString()))
                {
                }
                else
                {
                    quoteValue = true;
                }
            }


            if (fieldValue.IsNullOrEmpty())
            {
                if (nullValue != null)
                {
                    fieldValue = nullValue;
                }
            }

            if (size != null)
            {
                if (quoteValue)
                {
                    size = size.Value - 2;
                }
                if (size <= 0)
                {
                    return(String.Empty);
                }

                if (fieldValue.Length < size.Value)
                {
                    if (fillChar != ChoCharEx.NUL)
                    {
                        if (fieldValueJustification == ChoFieldValueJustification.Right)
                        {
                            fieldValue = fieldValue.PadLeft(size.Value, fillChar);
                        }
                        else if (fieldValueJustification == ChoFieldValueJustification.Left)
                        {
                            fieldValue = fieldValue.PadRight(size.Value, fillChar);
                        }
                    }
                }
                else if (fieldValue.Length > size.Value)
                {
                    if (truncate)
                    {
                        if (fieldValueTrimOption != null)
                        {
                            if (fieldValueTrimOption == ChoFieldValueTrimOption.TrimStart)
                            {
                                fieldValue = fieldValue.Right(size.Value);
                            }
                            else
                            {
                                fieldValue = fieldValue.Substring(0, size.Value);
                            }
                        }
                        else
                        {
                            fieldValue = fieldValue.Substring(0, size.Value);
                        }
                    }
                    else
                    {
                        if (isHeader)
                        {
                            throw new ApplicationException("Field header value length overflowed for '{0}' member [Expected: {1}, Actual: {2}].".FormatString(fieldName, size, fieldValue.Length));
                        }
                        else
                        {
                            throw new ApplicationException("Field value length overflowed for '{0}' member [Expected: {1}, Actual: {2}].".FormatString(fieldName, size, fieldValue.Length));
                        }
                    }
                }
            }

            if (quoteValue)
            {
                fieldValue = "{1}{0}{1}".FormatString(fieldValue, Configuration.QuoteChar);
            }

            return(fieldValue);
        }
Exemple #5
0
        public ChoFixedLengthReader <T> WithField(string name, int startIndex, int size, Type fieldType = null, bool?quoteField = null, ChoFieldValueTrimOption?fieldValueTrimOption = null,
                                                  string fieldName = null, Func <object, object> valueConverter = null)
        {
            if (!name.IsNullOrEmpty())
            {
                if (!_clearFields)
                {
                    Configuration.FixedLengthRecordFieldConfigurations.Clear();
                    _clearFields = true;
                }
                if (fieldName.IsNullOrWhiteSpace())
                {
                    fieldName = name;
                }

                Configuration.FixedLengthRecordFieldConfigurations.Add(new ChoFixedLengthRecordFieldConfiguration(name.NTrim(), startIndex, size)
                {
                    FieldType  = fieldType,
                    QuoteField = quoteField, FieldValueTrimOption = fieldValueTrimOption, FieldName = fieldName.NTrim(), ValueConverter = valueConverter
                });
            }

            return(this);
        }
Exemple #6
0
        private ChoFixedLengthReader <T> WithField(string name, int startIndex, int size, Type fieldType = null, bool?quoteField = null, ChoFieldValueTrimOption?fieldValueTrimOption = null,
                                                   string fieldName = null, Func <object, object> valueConverter = null,
                                                   Func <dynamic, object> valueSelector = null,
                                                   object defaultValue             = null, object fallbackValue = null, string altFieldNames = null,
                                                   string fullyQualifiedMemberName = null, string formatText    = null, string nullValue     = null, Func <object> expr = null)
        {
            if (!name.IsNullOrEmpty())
            {
                if (!_clearFields)
                {
                    ClearFields();
                    Configuration.MapRecordFields(Configuration.RecordType);
                }
                if (fieldName.IsNullOrWhiteSpace())
                {
                    fieldName = name;
                }

                string fnTrim = name.NTrim();
                ChoFixedLengthRecordFieldConfiguration fc = null;
                PropertyDescriptor pd = null;
                if (Configuration.FixedLengthRecordFieldConfigurations.Any(o => o.Name == fnTrim))
                {
                    fc = Configuration.FixedLengthRecordFieldConfigurations.Where(o => o.Name == fnTrim).First();
                    Configuration.FixedLengthRecordFieldConfigurations.Remove(fc);
                }
                else
                {
                    pd = ChoTypeDescriptor.GetNestedProperty(typeof(T), fullyQualifiedMemberName.IsNullOrWhiteSpace() ? name : fullyQualifiedMemberName);
                }

                var nfc = new ChoFixedLengthRecordFieldConfiguration(fnTrim, startIndex, size)
                {
                    FieldType            = fieldType,
                    QuoteField           = quoteField,
                    FieldValueTrimOption = fieldValueTrimOption,
                    FieldName            = fieldName,
                    ValueConverter       = valueConverter,
                    ValueSelector        = valueSelector,
                    DefaultValue         = defaultValue,
                    FallbackValue        = fallbackValue,
                    AltFieldNames        = altFieldNames,
                    FormatText           = formatText,
                    NullValue            = nullValue,
                    Expr = expr,
                };
                if (fullyQualifiedMemberName.IsNullOrWhiteSpace())
                {
                    nfc.PropertyDescriptor = fc != null ? fc.PropertyDescriptor : pd;
                    nfc.DeclaringMember    = fc != null ? fc.DeclaringMember : fullyQualifiedMemberName;
                }
                else
                {
                    pd = ChoTypeDescriptor.GetNestedProperty(typeof(T), fullyQualifiedMemberName);
                    nfc.PropertyDescriptor = pd;
                    nfc.DeclaringMember    = fullyQualifiedMemberName;
                }
                if (pd != null)
                {
                    if (nfc.FieldType == null)
                    {
                        nfc.FieldType = pd.PropertyType;
                    }
                }

                Configuration.FixedLengthRecordFieldConfigurations.Add(nfc);
            }

            return(this);
        }
Exemple #7
0
 public ChoFixedLengthReader <T> WithField(string name, int startIndex, int size, Type fieldType = null, bool?quoteField = null, ChoFieldValueTrimOption?fieldValueTrimOption = null,
                                           string fieldName = null, Func <object, object> valueConverter = null,
                                           Func <dynamic, object> valueSelector = null,
                                           object defaultValue = null, object fallbackValue = null, string altFieldNames = null, string formatText = null,
                                           string nullValue    = null, Func <object> expr   = null)
 {
     return(WithField(name, startIndex, size, fieldType, quoteField, fieldValueTrimOption,
                      fieldName, valueConverter, valueSelector, defaultValue, fallbackValue, altFieldNames, null, formatText, nullValue, expr));
 }
Exemple #8
0
        public ChoFixedLengthReader <T> WithField <TField>(Expression <Func <T, TField> > field, int startIndex, int size, bool?quoteField = null, ChoFieldValueTrimOption?fieldValueTrimOption = null,
                                                           string fieldName = null, Func <object, object> valueConverter = null,
                                                           Func <dynamic, object> valueSelector = null,
                                                           object defaultValue = null, object fallbackValue = null, string altFieldNames = null,
                                                           string formatText   = null,
                                                           string nullValue    = null, Func <object> expr = null)
        {
            if (field == null)
            {
                return(this);
            }

            return(WithField(field.GetMemberName(), startIndex, size, field.GetPropertyType(), quoteField, fieldValueTrimOption,
                             fieldName, valueConverter, valueSelector, defaultValue, fallbackValue, altFieldNames, field.GetFullyQualifiedMemberName(),
                             formatText, nullValue, expr));
        }
Exemple #9
0
 public ChoCSVRecordFieldConfigurationMap TrimOption(ChoFieldValueTrimOption?value)
 {
     _config.FieldValueTrimOption = value;
     return(this);
 }
 public ChoFixedLengthReader <T> WithField(string name, int startIndex, int size, bool?quoteField = null, ChoFieldValueTrimOption?fieldValueTrimOption = null, string fieldName = null)
 {
     return(WithField(name, startIndex, size, null, quoteField, fieldValueTrimOption, fieldName));
 }
Exemple #11
0
        private string NormalizeFieldValue(string fieldName, string fieldValue, int?size, bool truncate, bool?quoteField,
                                           ChoFieldValueJustification fieldValueJustification, char fillChar, bool isHeader = false, ChoFieldValueTrimOption?fieldValueTrimOption = null)
        {
            string lFieldValue = fieldValue;
            bool   retValue    = false;

            if (retValue)
            {
                return(lFieldValue);
            }

            if (fieldValue.IsNull())
            {
                fieldValue = String.Empty;
            }

            if (quoteField == null || !quoteField.Value)
            {
                if (fieldValue.StartsWith("\"") && fieldValue.EndsWith("\""))
                {
                }
                else
                {
                    if (!EOLDelimiter.IsNullOrEmpty() && fieldValue.Contains(EOLDelimiter))
                    {
                        if (isHeader)
                        {
                            throw new ChoParserException("Field header '{0}' value contains EOL delimiter character.".FormatString(fieldName));
                        }
                        else
                        {
                            fieldValue = "\"{0}\"".FormatString(fieldValue);
                        }
                    }
                }
            }
            else
            {
                if (fieldValue.StartsWith("\"") && fieldValue.EndsWith("\""))
                {
                }
                else
                {
                    fieldValue = "\"{0}\"".FormatString(fieldValue);
                }
            }

            if (size != null)
            {
                if (fieldValue.Length < size.Value)
                {
                    if (fillChar != ChoCharEx.NUL)
                    {
                        if (fieldValueJustification == ChoFieldValueJustification.Right)
                        {
                            fieldValue = fieldValue.PadLeft(size.Value, fillChar);
                        }
                        else if (fieldValueJustification == ChoFieldValueJustification.Left)
                        {
                            fieldValue = fieldValue.PadRight(size.Value, fillChar);
                        }
                    }
                }
                else if (fieldValue.Length > size.Value)
                {
                    if (truncate)
                    {
                        if (fieldValueTrimOption != null)
                        {
                            if (fieldValueTrimOption == ChoFieldValueTrimOption.TrimStart)
                            {
                                fieldValue = fieldValue.Right(size.Value);
                            }
                            else
                            {
                                fieldValue = fieldValue.Substring(0, size.Value);
                            }
                        }
                        else
                        {
                            fieldValue = fieldValue.Substring(0, size.Value);
                        }
                    }
                    else
                    {
                        if (isHeader)
                        {
                            throw new ApplicationException("Field header value length overflowed for '{0}' member [Expected: {1}, Actual: {2}].".FormatString(fieldName, size, fieldValue.Length));
                        }
                        else
                        {
                            throw new ApplicationException("Field value length overflowed for '{0}' member [Expected: {1}, Actual: {2}].".FormatString(fieldName, size, fieldValue.Length));
                        }
                    }
                }
            }

            //return fieldValue.StartsWith("<![CDATA[") ? fieldValue : System.Net.WebUtility.HtmlEncode(fieldValue);

            //escape quotes
            if (fieldValue.Contains('"'))
            {
                fieldValue = fieldValue.Replace(@"""", @"\""");
            }

            return(fieldValue);
        }
Exemple #12
0
        private string NormalizeFieldValue(string fieldName, string fieldValue, int?size, bool truncate, bool?quoteField,
                                           ChoFieldValueJustification fieldValueJustification, char fillChar, bool isHeader = false, string nullValue = null,
                                           ChoFieldValueTrimOption?fieldValueTrimOption = null, ChoCSVRecordFieldConfiguration fieldConfig            = null)
        {
            string lFieldValue = fieldValue;
            bool   retValue    = false;

            quoteValue = quoteField != null ? quoteField.Value : false;

            if (retValue)
            {
                return(lFieldValue);
            }

            if (fieldValue.IsNull())
            {
                fieldValue = String.Empty;
            }

            if (fieldValue.StartsWith(Configuration.QuoteChar.ToString()) && fieldValue.EndsWith(Configuration.QuoteChar.ToString()))
            {
            }
            else
            {
                if (quoteField == null)
                {
                    if (searchStrings == null)
                    {
                        searchStrings = (Configuration.QuoteChar.ToString() + Configuration.Delimiter + Configuration.EOLDelimiter).ToArray();
                    }

                    if (fieldValue.IndexOfAny(searchStrings) >= 0)
                    {
                        //******** ORDER IMPORTANT *********

                        //Fields that contain double quote characters must be surounded by double-quotes, and the embedded double-quotes must each be represented by a pair of consecutive double quotes.
                        if (fieldValue.IndexOf(Configuration.QuoteChar) >= 0)
                        {
                            if (!Configuration.EscapeQuoteAndDelimiter)
                            {
                                fieldValue = fieldValue.Replace(Configuration.QuoteChar.ToString(), Configuration.DoubleQuoteChar);
                            }
                            else
                            {
                                fieldValue = fieldValue.Replace(Configuration.QuoteChar.ToString(), "\\{0}".FormatString(Configuration.QuoteChar));
                            }

                            quoteValue = true;
                        }

                        if (fieldValue.IndexOf(Configuration.Delimiter) >= 0)
                        {
                            if (isHeader)
                            {
                                if (fieldConfig == null || fieldConfig.ValueSelector == null)
                                {
                                    throw new ChoParserException("Field header '{0}' value contains delimiter character.".FormatString(fieldName));
                                }
                            }
                            else
                            {
                                //Fields with embedded commas must be delimited with double-quote characters.
                                if (Configuration.EscapeQuoteAndDelimiter)
                                {
                                    fieldValue = fieldValue.Replace(Configuration.Delimiter, "\\{0}".FormatString(Configuration.Delimiter));
                                }

                                quoteValue = true;
                                //throw new ChoParserException("Field '{0}' value contains delimiter character.".FormatString(fieldName));
                            }
                        }

                        if (fieldValue.IndexOf(Configuration.EOLDelimiter) >= 0)
                        {
                            if (isHeader)
                            {
                                throw new ChoParserException("Field header '{0}' value contains EOL delimiter character.".FormatString(fieldName));
                            }
                            else
                            {
                                //A field that contains embedded line-breaks must be surounded by double-quotes
                                //if (Configuration.EscapeQuoteAndDelimiters)
                                //    fieldValue = fieldValue.Replace(Configuration.EOLDelimiter, "\\{0}".FormatString(Configuration.EOLDelimiter));

                                quoteValue = true;
                                //throw new ChoParserException("Field '{0}' value contains EOL delimiter character.".FormatString(fieldName));
                            }
                        }
                    }

                    if (!isHeader)
                    {
                        //Fields with leading or trailing spaces must be delimited with double-quote characters.
                        if (!fieldValue.IsNullOrWhiteSpace() && (char.IsWhiteSpace(fieldValue[0]) || char.IsWhiteSpace(fieldValue[fieldValue.Length - 1])))
                        {
                            quoteValue = true;
                        }
                    }
                }
                else
                {
                    quoteValue = quoteField.Value;
                }
            }
            //}
            //else
            //{
            //    if (fieldValue.StartsWith(Configuration.QuoteChar.ToString()) && fieldValue.EndsWith(Configuration.QuoteChar.ToString()))
            //    {

            //    }
            //    else
            //    {
            //        //Fields that contain double quote characters must be surrounded by double-quotes, and the embedded double-quotes must each be represented by a pair of consecutive double quotes.
            //        if (fieldValue.IndexOf(Configuration.QuoteChar) >= 0)
            //        {
            //            fieldValue = "{1}{0}{1}".FormatString(fieldValue.Replace(Configuration.QuoteChar.ToString(), Configuration.DoubleQuoteChar), Configuration.QuoteChar);
            //        }
            //        else
            //            fieldValue = "{1}{0}{1}".FormatString(fieldValue, Configuration.QuoteChar);
            //    }
            //}

            //if (quoteValue)
            //	size = size - 2;

            if (fieldValue.IsNullOrEmpty())
            {
                if (nullValue != null)
                {
                    fieldValue = nullValue;
                }
            }

            if (size != null)
            {
                if (quoteValue)
                {
                    size = size.Value - 2;
                }
                if (size <= 0)
                {
                    return(String.Empty);
                }

                if (fieldValue.Length < size.Value)
                {
                    if (fillChar != ChoCharEx.NUL)
                    {
                        if (fieldValueJustification == ChoFieldValueJustification.Right)
                        {
                            fieldValue = fieldValue.PadLeft(size.Value, fillChar);
                        }
                        else if (fieldValueJustification == ChoFieldValueJustification.Left)
                        {
                            fieldValue = fieldValue.PadRight(size.Value, fillChar);
                        }
                    }
                }
                else if (fieldValue.Length > size.Value)
                {
                    if (truncate)
                    {
                        if (fieldValueTrimOption != null)
                        {
                            if (fieldValueTrimOption == ChoFieldValueTrimOption.TrimStart)
                            {
                                fieldValue = fieldValue.Right(size.Value);
                            }
                            else
                            {
                                fieldValue = fieldValue.Substring(0, size.Value);
                            }
                        }
                        else
                        {
                            fieldValue = fieldValue.Substring(0, size.Value);
                        }
                    }
                    else
                    {
                        if (isHeader)
                        {
                            throw new ApplicationException("Field header value length overflowed for '{0}' member [Expected: {1}, Actual: {2}].".FormatString(fieldName, size, fieldValue.Length));
                        }
                        else
                        {
                            throw new ApplicationException("Field value length overflowed for '{0}' member [Expected: {1}, Actual: {2}].".FormatString(fieldName, size, fieldValue.Length));
                        }
                    }
                }
            }

            if (fieldConfig != null && fieldConfig.ValueSelector != null)
            {
                quoteValue = false;
            }

            if (quoteValue)
            {
                fieldValue = "{1}{0}{1}".FormatString(fieldValue, Configuration.QuoteChar);
            }

            return(fieldValue);
        }
        public ChoFixedLengthReader <T> WithField(string fieldName, int startIndex, int size, Type fieldType, bool?quoteField = null, ChoFieldValueTrimOption?fieldValueTrimOption = null)
        {
            if (!fieldName.IsNullOrEmpty())
            {
                if (!_clearFields)
                {
                    Configuration.FixedLengthRecordFieldConfigurations.Clear();
                    _clearFields = true;
                }

                Configuration.FixedLengthRecordFieldConfigurations.Add(new ChoFixedLengthRecordFieldConfiguration(fieldName.Trim(), startIndex, size)
                {
                    FieldType = fieldType, QuoteField = quoteField, FieldValueTrimOption = fieldValueTrimOption
                });
            }

            return(this);
        }