You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

143 lines
4.8 KiB

  1. using Apewer;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Text;
  5. namespace Apewer.Internals
  6. {
  7. internal class TextList
  8. {
  9. private const char Delimiter = '|';
  10. private const string Equal = "=";
  11. /// <summary>在 List 中增加项。</summary>
  12. public static string ListAppend(string argList, string argItem)
  13. {
  14. string vlist;
  15. vlist = string.IsNullOrEmpty(argList) ? "" : argList;
  16. if (string.IsNullOrEmpty(argItem))
  17. {
  18. return vlist;
  19. }
  20. else
  21. {
  22. if (TextHelper.Len(vlist) > 0) vlist = vlist + Delimiter;
  23. vlist = vlist + TextConverter.EncodeText(argItem);
  24. return vlist;
  25. }
  26. }
  27. /// <summary>解析。</summary>
  28. public static List<string> ListUnlash(string argText)
  29. {
  30. List<string> vlist = new List<string>();
  31. if (!string.IsNullOrEmpty(argText))
  32. {
  33. string[] va = TextUtility.Split(TextHelper.LCase(argText), Delimiter);
  34. for (int i = 0; i < va.Length; i++) vlist.Add(TextConverter.DecodeText(va[i]));
  35. }
  36. return vlist;
  37. }
  38. /// <summary>获取 List 中的元素数量。</summary>
  39. public static int ListCount(string argList)
  40. {
  41. int vresult;
  42. if (string.IsNullOrEmpty(argList)) return 0;
  43. try
  44. {
  45. string[] va = TextUtility.Split(argList, Delimiter);
  46. vresult = va.Length;
  47. }
  48. catch
  49. {
  50. vresult = -1;
  51. }
  52. return vresult;
  53. }
  54. /// <summary>更新 Args 元素。</summary>
  55. public static string ArgsUpdate(string argText, string argName, string argValue)
  56. {
  57. string vtext, vleft, vright;
  58. vtext = string.IsNullOrEmpty(argName) ? Constant.EmptyString : TextHelper.LCase(argText);
  59. if (string.IsNullOrEmpty(argName)) return vtext;
  60. else vleft = TextHelper.LCase(TextConverter.EncodeText(TextHelper.LCase(argName)));
  61. vright = string.IsNullOrEmpty(argValue) ? Constant.EmptyString : TextHelper.LCase(TextConverter.EncodeText(argValue));
  62. if (TextHelper.Len(vtext) > 0)
  63. {
  64. var vb = new TextBuilder();
  65. bool vupdated = false;
  66. string vread, vrl, vrr;
  67. string[] varray = TextUtility.Split(vtext, Delimiter);
  68. for (int i = 0; i < varray.Length; i++)
  69. {
  70. vread = varray[i];
  71. vrl = ArgLeft(vread);
  72. vrr = ArgRight(vread);
  73. if (i > 0) vb.Append(Delimiter.ToString());
  74. if (vrl == vleft)
  75. {
  76. vupdated = true;
  77. vb.Append(vleft + Equal + vright);
  78. }
  79. else
  80. {
  81. vb.Append(vread);
  82. }
  83. }
  84. if (!vupdated) vb.Append(Delimiter + vleft + Equal + vright);
  85. return vb.Value;
  86. }
  87. else
  88. {
  89. return vleft + Equal + vright;
  90. }
  91. }
  92. /// <summary>查询 Args 中的元素。</summary>
  93. public static string ArgsQuery(string argText, string argName)
  94. {
  95. if ((!string.IsNullOrEmpty(argText)) && (!string.IsNullOrEmpty(argName)))
  96. {
  97. string vtext, vname;
  98. string[] varray;
  99. vtext = TextHelper.LCase(argText);
  100. vname = TextHelper.LCase(TextConverter.EncodeText(argName));
  101. varray = TextUtility.Split(vtext, Delimiter);
  102. for (int i = 0; i < varray.Length; i++)
  103. {
  104. string vleft = ArgLeft(varray[i]);
  105. string vright = ArgRight(varray[i]);
  106. if (vleft == vname) return TextConverter.DecodeText(vright);
  107. }
  108. }
  109. return Constant.EmptyString;
  110. }
  111. private static string ArgLeft(string argText)
  112. {
  113. if (!string.IsNullOrEmpty(argText))
  114. {
  115. int vis = TextHelper.InStr(argText, Equal);
  116. if (vis > 0) return TextHelper.Left(argText, vis - 1);
  117. }
  118. return "";
  119. }
  120. private static string ArgRight(string argText)
  121. {
  122. if (!string.IsNullOrEmpty(argText))
  123. {
  124. int vis = TextHelper.InStr(argText, Equal);
  125. if (vis > 0) return TextHelper.Right(argText, TextHelper.Len(argText) - vis);
  126. }
  127. return "";
  128. }
  129. }
  130. }