private static string formatNum(string svalue, FieldFormatOptions options, StringBuilder errors)
        {
            StringBuilder s = new StringBuilder();

            foreach (char c in svalue)
            {
                if (char.IsDigit(c))
                {
                    s.Append(c);
                }
            }
            return(s.ToString());
        }
 private static string applyFixedLength(string svalue, FieldFormatOptions options, StringBuilder errors)
 {
     if (options.FixedLength.HasValue)
     {
         if (svalue.Length > options.FixedLength.Value)
         {
             errors.AppendLine(string.Format("Truncating {0} fixed length {1} value too long {2}", options.FieldName, options.FixedLength.Value, svalue));
             return(svalue.Substring(0, options.FixedLength.Value));
         }
         else if (svalue.Length == options.FixedLength)
         {
             return(svalue);
         }
         StringBuilder s     = new StringBuilder();
         bool          right = options.DataType == "n";
         right = right || options.DataType.EndsWith("r");
         if (right)
         {
             // right aligned
             while (s.Length + svalue.Length < options.FixedLength.Value)
             {
                 s.Append(options.BlankFiller);
             }
             if (!string.IsNullOrEmpty(svalue))
             {
                 s.Append(svalue);
             }
         }
         else
         {
             // left aligned
             if (!string.IsNullOrEmpty(svalue))
             {
                 s.Append(svalue);
             }
             while (s.Length < options.FixedLength.Value)
             {
                 s.Append(options.BlankFiller);
             }
         }
         return(s.ToString());
     }
     else
     {
         return(svalue);
     }
 }
        private static string formatDate(string svalue, FieldFormatOptions options, StringBuilder errors)
        {
            DateTime d;

            if (DateTime.TryParse(svalue, out d))
            {
                if (!string.IsNullOrEmpty(options.Format))
                {
                    return(d.ToString(options.Format));
                }
                else
                {
                    return(d.ToString("yyyy-MM-dd"));
                }
            }
            return(string.Empty);
        }
        private static string formatAlphaNum(string svalue, FieldFormatOptions options, StringBuilder errors)
        {
            StringBuilder s = new StringBuilder();

            foreach (char c in svalue)
            {
                if (char.IsLetterOrDigit(c))
                {
                    s.Append(c);
                }
                else
                {
                    s.Append(' ');
                }
            }
            return(s.ToString().Trim());
        }
        private static string applyFormat(string svalue, FieldFormatOptions options, StringBuilder errors)
        {
            string formatted;

            switch (options.DataType)
            {
            case "a": formatted = formatAlpha(svalue, options, errors); break;

            case "an": formatted = formatAlphaNum(svalue, options, errors); break;

            case "n": formatted = formatNum(svalue, options, errors); break;

            case "dt": formatted = formatDate(svalue, options, errors); break;

            default: formatted = svalue; break;
            }
            return(applyFixedLength(formatted, options, errors));
        }
        private static FieldFormatOptions parseFormatting(string format, string fieldName)
        {
            var    formats0 = format.Trim().Split(new[] { ',' }, 3);
            var    formats  = formats0.Select(a => a.Trim()).ToArray();
            string dataType;
            string dotnetFormatString;

            if (formats.Length > 0)
            {
                if (formats[0].Contains("["))
                {
                    int f1 = formats[0].IndexOf('[');
                    int f2 = formats[0].IndexOf(']', f1);
                    if (f2 == -1)
                    {
                        f2 = formats[0].Length - 1;
                    }
                    dataType           = formats[0].Substring(0, f1);
                    dotnetFormatString = formats[0].Substring(f1 + 1, f2 - f1);
                }
                else
                {
                    dataType           = formats[0];
                    dotnetFormatString = null;
                }
            }
            else
            {
                dataType           = "an";
                dotnetFormatString = null;
            }
            bool required;
            char blankFiller = dataType == "n" || dataType == "dt" ? '0' : ' ';

            if (formats.Length > 1)
            {
                required = formats[1] == "m";
                int blankf1 = formats[1].IndexOf('[');
                if (blankf1 > 0)
                {
                    blankFiller = formats[1][blankf1 + 1];
                }
            }
            else
            {
                required = false;
            }
            int?fixedLength;

            if (formats.Length > 2)
            {
                int fx;
                if (int.TryParse(formats[2], out fx))
                {
                    fixedLength = fx;
                }
                else
                {
                    fixedLength = null;
                }
            }
            else
            {
                fixedLength = null;
            }

            var options = new FieldFormatOptions()
            {
                FieldName   = fieldName,
                DataType    = dataType,
                Format      = dotnetFormatString,
                Required    = required,
                BlankFiller = blankFiller,
                FixedLength = fixedLength
            };

            return(options);
        }