/// <summary> /// 将形如#1(int)的数据定义解析为要输出的字符串 /// </summary> private static string _GetDataInIndexType(DataInIndexDefine define, string oneDataString, out string errorString) { // 一组数据中的子元素用英文逗号分隔 string[] allElementString = oneDataString.Trim().Split(new char[] { ',' }, System.StringSplitOptions.RemoveEmptyEntries); // 检查是否存在指定序号的数据 if (allElementString.Length < define.DataIndex) { errorString = string.Format("解析#{0}({1})类型的数据错误,输入的数据中只有{2}个子元素", define.DataIndex, define.DataType.ToString(), allElementString.Length); return(null); } // 检查是否为指定类型的合法数据 string inputString = allElementString[define.DataIndex - 1]; if (define.DataType != DataType.String) { inputString = inputString.Trim(); } string value = _GetDataStringInTableString(inputString, define.DataType, out errorString); if (errorString != null) { errorString = string.Format("解析#{0}({1})类型的数据错误,", define.DataIndex, define.DataType.ToString()) + errorString; return(null); } else { return(value); } }
/// <summary> /// 将形如#1(int)的格式定义字符串转为DataInIndexDefine定义 /// </summary> private static DataInIndexDefine _GetDataInIndexDefine(string defineString, out string errorString) { DataInIndexDefine dataInIndexDefine = new DataInIndexDefine(); // 检查#后是否跟合法数字,且数字后面用括号注明类型 defineString = defineString.Substring(1).Trim(); // 检查类型是否合法 int leftBracketIndex = defineString.IndexOf('('); int rightBracketIndex = defineString.LastIndexOf(')'); if (leftBracketIndex == -1 || rightBracketIndex != defineString.Length - 1) { errorString = "未注明格式类型,需要形如:#1(int)"; return(dataInIndexDefine); } else { string dataTypeString = defineString.Substring(leftBracketIndex + 1, rightBracketIndex - leftBracketIndex - 1).Trim(); dataInIndexDefine.DataType = _AnalyzeDataType(dataTypeString); if (!(dataInIndexDefine.DataType == DataType.Int || dataInIndexDefine.DataType == DataType.Float || dataInIndexDefine.DataType == DataType.Bool || dataInIndexDefine.DataType == DataType.String || dataInIndexDefine.DataType == DataType.Lang)) { errorString = "格式类型非法,只支持int、float、bool、string、lang这几种类型"; return(dataInIndexDefine); } } // 检查数据索引值是否合法 string dataIndexString = defineString.Substring(0, leftBracketIndex).Trim(); int dataIndex; if (int.TryParse(dataIndexString, out dataIndex)) { if (dataIndex > 0) { dataInIndexDefine.DataIndex = dataIndex; } else { errorString = "数据索引值编号最小要从1开始"; return(dataInIndexDefine); } } else { errorString = string.Format("数据索引值不是合法数字,你的输入值为:{0}", dataIndexString); return(dataInIndexDefine); } errorString = null; return(dataInIndexDefine); }