DictProp是一个极其简单的字符串分析工具类,主要用于分析由固定分隔符划分的字符串信息,将它们放在字典表中以作进一步的应用。
比如有一个字符串: Data Source=DEBUG;User ID=wang;Password=wang123;Unicode=True
String connStr = "Data Source=DEBUG;User ID=wang;Password=wang123;Unicode=True"; //根据源字符串、第一分隔符、第二分隔符新建字符串字典工具类DictProp dp = new DictProp(connStr, ";", "="); //这时可以提取相关的信息string dataSource = dp.GetPropStr("Data Source"); bool isUnicode = dp.GetPropBool("Unicode");//....
它的实现如下:
using System;using System.Collections.Generic;using System.Text;using System.Collections;namespace xxxxx{ ////// 从字段中取自定义属性的操作类 /// public class DictProp { ////// 包含属性的字符串 /// private String PropStr; ////// 包含属性的Hash表 /// private DictionarypropDict; /// /// 行分隔符 /// String Split1 = "\r\n"; ////// 行内属性名称和值之间的分隔符 /// String Split2 = "="; ////// 根据要分析的字符串,第一分隔符和第二分隔符新建一个哈希对象 /// /// 待分解的字符串 /// 第一分隔符 /// 第二分隔符 public DictProp(String propStr, string split1, string split2) { PropStr = propStr; Split1 = split1; Split2 = split2; Str2Hash(); } ////// 键-值对 /// public DictionaryKeyValues { get { return propDict; } } /// /// 将字符串转成Hash表 /// ///private Dictionary Str2Hash() { if (propDict == null) { propDict = new Dictionary (); } else { propDict.Clear(); } char s1 = '\n'; char s2 = '='; String propstr = PropStr.Replace(Split1, s1.ToString()).Replace(Split2, s2.ToString()); string[] propArr = propstr.Split(s1); foreach (String s in propArr) { string[] sArr = s.Split(new char[] { s2 }, 2); if (sArr.Length > 1) { SetProp(sArr[0].Trim(), sArr[1].Trim()); } else { SetProp(sArr[0].Trim(), ""); } } return propDict; } /// /// 当字典表为空时才将字符串转换成Hash表 /// ///public Dictionary Str2HashWhenEmpty() { if (propDict == null || propDict.Count == 0) Str2Hash(); return propDict; } /// /// 强制字典表为空,再将字符串转换成Hash表 /// ///public Dictionary Str2HashReset() { propDict = null; Str2Hash(); return propDict; } /// /// 将字典表转成字符串 /// ///public String Hash2Str() { if (propDict == null) return null; PropStr = ""; foreach (KeyValuePair k in propDict) { String s = Split1 + k.Key.ToString() + Split2 + k.Value.ToString(); PropStr += s; } if (PropStr != "") PropStr = PropStr.Substring(Split1.Length); return PropStr; } /// /// 设置一个属性 /// /// 属性名称 /// 属性值 public void SetProp(String propName, object o) { propDict[propName] = CommOp.ToStr(o); } ////// 获取字符型属性 /// /// ///public String GetPropStr(String propName) { return PropExists(propName) ? CommOp.ToStr(propDict[propName]) : String.Empty; } /// /// 获取整型属性 /// /// ///public int GetPropInt(String propName) { return PropExists(propName) ? CommOp.ToInt(propDict[propName]) : 0; } /// /// 是否存在指定属性名称 /// /// ///public bool PropExists(String propName) { return propDict.ContainsKey(propName); } /// /// 获取浮点型属性 /// /// ///public float GetPropFloat(String propName) { return PropExists(propName) ? CommOp.ToFloat(propDict[propName]) : 0; } /// /// 获取双精度数 /// /// ///public double GetPropDouble(String propName) { return PropExists(propName) ? CommOp.ToDouble(propDict[propName]) : 0; } /// /// 获取日期 /// /// ///public DateTime GetPropDate(String propName) { return PropExists(propName) ? CommOp.ToDateTime(propDict[propName]) : DateTime.MinValue; } /// /// 获取布尔型属性 /// /// ///public bool GetPropBool(String propName) { if (propDict.ContainsKey(propName)) { return CommOp.ToStr(propDict[propName]).ToLower() == "true"; } else { return false; } } }}