/// <summary> /// The do read config value. /// </summary> /// <param name="name"> /// The name. /// </param> /// <param name="value"> /// The value. /// </param> /// <param name="rawRead"> /// The raw read. /// </param> /// <typeparam name="T"> /// </typeparam> /// <returns> /// The <see cref="bool"/>. /// </returns> private static bool DoReadConfigValue <T>(string name, ref T value, bool rawRead) { Func <Match, int> func = null; try { var bTrimFirst = true; var input = TStringHelper.StringToNull(AppSettings[name], bTrimFirst); if (input != null) { if (!rawRead) { var matchCollection = regexEnvironmentVariable.Matches(input); if ((matchCollection != null) && (matchCollection.Count > 0)) { var builder = new StringBuilder(input); if (func == null) { func = row => row.Index; } foreach (var match in matchCollection.EnumerateMatches().OrderByDescending(func)) { var str2 = match.Groups[1].Value; var str3 = !string.IsNullOrEmpty(str2) ? TStringHelper.StringToEmpty(Environment.GetEnvironmentVariable(str2)) : string.Empty; builder.Remove(match.Index, match.Length); builder.Insert(match.Index, str3); } input = builder.ToString(); } } value = ConversionHelper.StringToValue <T>(input); return(true); } } catch { } return(false); }
/// <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(null); } if (!trimToNull) { return(attribute.Value); } var bTrimFirst = true; return(TStringHelper.StringToNull(attribute.Value, bTrimFirst)); }
// разрешить все ссылки на имена обрабатываемых полей // public void ResolveAllowedFields(PolicySearchFieldNameResolver resolver) // { // if (converters != null) // { // foreach (var converter in converters) // converter.AllowedFields.ResolveFields(resolver); // } // } // разрешить все ссылки на имена обрабатываемых полей // public void ResolveAllowedFields() // { // ResolveAllowedFields(FieldNameResolver); // } // провести подготовку строки, задав тонкие настройки /// <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); }
// public static void SerializeObject(Stream stream, object obj, IXmlNamespaceResolver resolver = new IXmlNamespaceResolver()) // { // XmlSerializer serializer = new XmlSerializer(obj.GetType()); // XmlSerializerNamespaces namespaces = ResolveNamespacesForSerializer(resolver, false); // if (namespaces != null) // { // serializer.Serialize(stream, obj, namespaces); // } // else // { // serializer.Serialize(stream, obj); // } // } // public static void SerializeObject(XmlWriter xmlWriter, object obj, IXmlNamespaceResolver resolver = new IXmlNamespaceResolver()) // { // XmlSerializer serializer = new XmlSerializer(obj.GetType()); // XmlSerializerNamespaces namespaces = ResolveNamespacesForSerializer(resolver, false); // if (namespaces != null) // { // serializer.Serialize(xmlWriter, obj, namespaces); // } // else // { // serializer.Serialize(xmlWriter, obj); // } // } /// <summary> /// The split x path. /// </summary> /// <param name="xpath"> /// The xpath. /// </param> /// <returns> /// The <see cref="IEnumerable"/>. /// </returns> /// <exception cref="ArgumentException"> /// </exception> public static IEnumerable <string> SplitXPath(this string xpath) { List <string> list = null; char ch; var bTrimFirst = true; xpath = TStringHelper.StringToNull(xpath, bTrimFirst); if (xpath == null) { return(list); } var length = xpath.Length; var startIndex = 0; var num3 = 0; var none = QuotationMark.None; Label_0023: ch = xpath[num3]; var ch2 = ch; if (ch2 <= '\'') { switch (ch2) { case '"': switch (none) { case QuotationMark.None: none = QuotationMark.DoubleQuotes; goto Label_00D1; case QuotationMark.Apostrophe: goto Label_00D1; case QuotationMark.DoubleQuotes: none = QuotationMark.None; goto Label_00D1; } goto Label_00D1; case '\'': switch (none) { case QuotationMark.None: none = QuotationMark.Apostrophe; goto Label_00D1; case QuotationMark.Apostrophe: none = QuotationMark.None; goto Label_00D1; } goto Label_00D1; } } else if (((ch2 == '/') || (ch2 == '\\')) && (none == QuotationMark.None)) { var str = xpath.Substring(startIndex, num3 - startIndex); if (string.IsNullOrEmpty(str) && (list != null)) { throw new ArgumentException("пустой узел в x-path выражении"); } if (list == null) { list = new List <string>(); } list.Add(str); startIndex = num3 + 1; } Label_00D1: if (++num3 < length) { goto Label_0023; } if (none != QuotationMark.None) { throw new ArgumentException("незакрытая кавычка в x-path выражении"); } if (list == null) { list = new List <string>(); } list.Add(xpath.Substring(startIndex, num3 - startIndex)); return(list); }
/// <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); }