_ParamParser.cs
上传用户:horngjaan
上传日期:2009-12-12
资源大小:2882k
文件大小:3k
源码类别:

Email服务器

开发平台:

C#

  1. using System;
  2. using System.Collections;
  3. namespace LumiSoft.MailServer
  4. {
  5. #region class _Parameter
  6. internal class _Parameter
  7. {
  8. private string m_ParamName  = "";
  9. private string m_ParamValue = "";
  10. /// <summary>
  11. /// Default constructor.
  12. /// </summary>
  13. /// <param name="paramName"></param>
  14. /// <param name="paramValue"></param>
  15. public _Parameter(string paramName,string paramValue)
  16. {
  17. m_ParamName  = paramName;
  18. m_ParamValue = paramValue;
  19. }
  20. #region Properties implementation
  21. /// <summary>
  22. /// 
  23. /// </summary>
  24. public string ParamName
  25. {
  26. get{ return m_ParamName; }
  27. }
  28. /// <summary>
  29. /// 
  30. /// </summary>
  31. public string ParamValue
  32. {
  33. get{ return m_ParamValue; }
  34. }
  35. #endregion
  36. }
  37. #endregion
  38. /// <summary>
  39. /// Summary description for _ParamParser.
  40. /// </summary>
  41. internal class _ParamParser
  42. {
  43. // public _ParamParser()
  44. // {
  45. // }
  46. #region function Parse
  47. /// <summary>
  48. /// Parses parameters.
  49. /// </summary>
  50. /// <param name="argsText">Arguments text.</param>
  51. /// <param name="paramNames">Array of wanted parameters.</param>
  52. /// <param name="paramValueSeparators">Array of possible separators(name/value).</param>
  53. /// <returns>Returns array of parsed parametes.</returns>
  54. public static _Parameter[] Parse(string argsText,string[] paramNames,string[] paramValueSeparators)
  55. {
  56. //--- Remove continues spaces ---------//
  57. // eg, aaa=  5 would be aaa=5
  58. while(true){
  59. if(argsText.IndexOf("  ") == -1){
  60. break;
  61. }
  62. argsText = argsText.Replace("  "," ");
  63. }
  64. //--------------------------------------//
  65. //--- Remove spaces between parameter and value ---//
  66. // eg, FROM : aa would be FROM:a
  67. foreach(string sep in paramValueSeparators){
  68. int iSepPos = 0;
  69. while(argsText.IndexOf(sep,iSepPos) > -1){
  70. iSepPos = argsText.IndexOf(sep,iSepPos);
  71. //1) check left side of separator
  72. //2) check right side of separator
  73. if(iSepPos > 1){
  74. // if left side char is ' ', remove it.
  75. if(argsText.Substring(iSepPos-1,1) == " "){
  76. argsText = argsText.Remove(iSepPos-1,1);
  77. iSepPos--;
  78. }
  79. }
  80. // if right side char is ' ', remove it.
  81. if(iSepPos < argsText.Length-1 && argsText.Substring(iSepPos+1,1) == " "){
  82. argsText = argsText.Remove(iSepPos+1,1);
  83. }
  84. iSepPos++;
  85. }
  86. }
  87. //-------------------------------------------------//
  88. ArrayList paramList = new ArrayList();
  89. string[] param = argsText.Split(new char[]{' '});
  90. foreach(string parameterInfo in param){
  91. string name = parameterInfo;
  92. string val  = "";
  93. // Try to split paramName and paramValue
  94. foreach(string paramName in paramNames){
  95. if(parameterInfo.ToUpper().StartsWith(paramName)){
  96. name = paramName;
  97. // Gets parameter value. 
  98. if(parameterInfo.Length > paramName.Length){
  99. val = parameterInfo.Substring(paramName.Length);
  100. }
  101. break;
  102. }
  103. }
  104. paramList.Add(new _Parameter(name,val));
  105. }
  106. _Parameter[] retVal = new _Parameter[paramList.Count];
  107. paramList.CopyTo(retVal);
  108. return retVal;
  109. }
  110. #endregion
  111. }
  112. }