コード例 #1
0
        // получить значение атрибута
        #region Public Methods and Operators

        /// <summary>
        /// The retrieve attribute.
        /// </summary>
        /// <param name="xmlNode">
        /// The xml node.
        /// </param>
        /// <param name="attributeName">
        /// The attribute name.
        /// </param>
        /// <param name="trimToNull">
        /// The trim to null.
        /// </param>
        /// <returns>
        /// The <see cref="string"/>.
        /// </returns>
        public static string RetrieveAttribute(this XElement xmlNode, string attributeName, bool trimToNull = false)
        {
            var attribute = xmlNode.Attribute(attributeName);

            if (attribute != null)
            {
                return(trimToNull ? TStringHelper.StringToNull(attribute.Value, true) : attribute.Value);
            }

            return(null);
        }
コード例 #2
0
        // провести подготовку строки, задав тонкие настройки
        /// <summary>
        /// The prepare string.
        /// </summary>
        /// <param name="s">
        /// The s.
        /// </param>
        /// <param name="field">
        /// The field.
        /// </param>
        /// <param name="flagged">
        /// The flagged.
        /// </param>
        /// <param name="emptyToNull">
        /// The empty to null.
        /// </param>
        /// <returns>
        /// The <see cref="string"/>.
        /// </returns>
        /// <exception cref="InvalidCastException">
        /// </exception>
        public string PrepareString(
            string s,
            FieldTypes field = FieldTypes.Undefined,
            bool flagged     = false,
            bool emptyToNull = false)
        {
            if (s != null)
            {
                /*
                 * следует учитывать, что после преобразований какие-то буквы могут исчезнуть, а какие-то добавиться
                 * в результате может сложиться новая последовательность символов, которая сама по себе подлежит преобразованию
                 * наша цель: получить некий "конечный" результат, то есть такой, который уже не будет меняться, если к нему снова и снова применить все те же преобразования
                 *
                 * для этого будем повторять преобразования в цикле до тех пор, пока хоть что-то в строке меняется (разумеется, с защитой от зацикливания)
                 * поначалу предполагалось сделать кеш готовых значений, но тесты показали, что в этом нет особого смысла, потому что наличие цикла добавило всего 2-3% времени на обработку файла
                 */
                ushort cycles     = 0;
                var    original_s = s;
                do
                {
                    // текущее значение строки
                    var saved_s = s;

                    // преобразование к верхнему регистру
                    if (GlobalUpper)
                    {
                        s = s.ToUpper();
                    }

                    // применить настраиваемые преобразования
                    if (converters != null)
                    {
                        foreach (var converter in converters)
                        {
                            s = converter.Convert(s, field, flagged);
                        }
                    }

                    // убрать боковые пробелы
                    if (GlobalTrim)
                    {
                        s = s.Trim();
                    }

                    // убрать лишние пробелы
                    if (GlobalCompact)
                    {
                        s = TStringHelper.CompactString(s);
                    }

                    // прерываем цикл, когда никаких изменений в строке больше нет
                    if (string.Compare(s, saved_s, StringComparison.Ordinal) == 0)
                    {
                        break;
                    }

                    // защита от зацикливания
                    if (++cycles > 10000)
                    {
                        throw new InvalidCastException(
                                  string.Format(
                                      "TextRules.PrepareString: зацикливание! field: {0}, flagged: {1}, string: {2}",
                                      field,
                                      flagged,
                                      original_s));
                    }
                }while (true);

                // привести пустую строку к null
                if (emptyToNull)
                {
                    s = TStringHelper.StringToNull(s);
                }
            }

            return(s);
        }
コード例 #3
0
ファイル: StringConverterBase.cs プロジェクト: syurov/rt.srz
 /// <summary>
 /// Initializes a new instance of the <see cref="StringMatchingBase"/> class.
 /// </summary>
 /// <param name="matcher">
 /// The matcher.
 /// </param>
 protected StringMatchingBase(string matcher)
 {
     this.matcher = TStringHelper.StringToNull(matcher);
 }