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

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 = "=";
/// <summary>在 List 中增加项。</summary>
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;
}
}
/// <summary>解析。</summary>
public static List<string> ListUnlash(string argText)
{
List<string> vlist = new List<string>();
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;
}
/// <summary>获取 List 中的元素数量。</summary>
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;
}
/// <summary>更新 Args 元素。</summary>
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;
}
}
/// <summary>查询 Args 中的元素。</summary>
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 "";
}
}
}