using Apewer; using System; using System.Collections.Generic; using System.Text; namespace Apewer.Internals { internal class TextList { private const char Delimiter = '|'; private const string Equal = "="; /// 在 List 中增加项。 public static string ListAppend(string argList, string argItem) { string vlist; vlist = string.IsNullOrEmpty(argList) ? "" : argList; if (string.IsNullOrEmpty(argItem)) { return vlist; } else { if (TextHelper.Len(vlist) > 0) vlist = vlist + Delimiter; vlist = vlist + TextConverter.EncodeText(argItem); return vlist; } } /// 解析。 public static List ListUnlash(string argText) { List vlist = new List(); if (!string.IsNullOrEmpty(argText)) { string[] va = TextUtility.Split(TextHelper.LCase(argText), Delimiter); for (int i = 0; i < va.Length; i++) vlist.Add(TextConverter.DecodeText(va[i])); } return vlist; } /// 获取 List 中的元素数量。 public static int ListCount(string argList) { int vresult; if (string.IsNullOrEmpty(argList)) return 0; try { string[] va = TextUtility.Split(argList, Delimiter); vresult = va.Length; } catch { vresult = -1; } return vresult; } /// 更新 Args 元素。 public static string ArgsUpdate(string argText, string argName, string argValue) { string vtext, vleft, vright; vtext = string.IsNullOrEmpty(argName) ? Constant.EmptyString : TextHelper.LCase(argText); if (string.IsNullOrEmpty(argName)) return vtext; else vleft = TextHelper.LCase(TextConverter.EncodeText(TextHelper.LCase(argName))); vright = string.IsNullOrEmpty(argValue) ? Constant.EmptyString : TextHelper.LCase(TextConverter.EncodeText(argValue)); if (TextHelper.Len(vtext) > 0) { var vb = new TextBuilder(); bool vupdated = false; string vread, vrl, vrr; string[] varray = TextUtility.Split(vtext, Delimiter); for (int i = 0; i < varray.Length; i++) { vread = varray[i]; vrl = ArgLeft(vread); vrr = ArgRight(vread); if (i > 0) vb.Append(Delimiter.ToString()); if (vrl == vleft) { vupdated = true; vb.Append(vleft + Equal + vright); } else { vb.Append(vread); } } if (!vupdated) vb.Append(Delimiter + vleft + Equal + vright); return vb.Value; } else { return vleft + Equal + vright; } } /// 查询 Args 中的元素。 public static string ArgsQuery(string argText, string argName) { if ((!string.IsNullOrEmpty(argText)) && (!string.IsNullOrEmpty(argName))) { string vtext, vname; string[] varray; vtext = TextHelper.LCase(argText); vname = TextHelper.LCase(TextConverter.EncodeText(argName)); varray = TextUtility.Split(vtext, Delimiter); for (int i = 0; i < varray.Length; i++) { string vleft = ArgLeft(varray[i]); string vright = ArgRight(varray[i]); if (vleft == vname) return TextConverter.DecodeText(vright); } } return Constant.EmptyString; } private static string ArgLeft(string argText) { if (!string.IsNullOrEmpty(argText)) { int vis = TextHelper.InStr(argText, Equal); if (vis > 0) return TextHelper.Left(argText, vis - 1); } return ""; } private static string ArgRight(string argText) { if (!string.IsNullOrEmpty(argText)) { int vis = TextHelper.InStr(argText, Equal); if (vis > 0) return TextHelper.Right(argText, TextHelper.Len(argText) - vis); } return ""; } } }