using MES.Utility.Core; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using 常用工具集.Base; using NHibernate.AdoNet.Util; using System.Xml; using System.IO; namespace 常用工具集.ViewModel._05其他 { public class SQLStringBuilder封装ViewModel : ViewModelBase { public string Button1Text { get; set; } = "生成"; public string TextBox1 { get; set; } = ""; public string TextBox2 { get; set; } = ""; public string TextBox3 { get; set; } = "strSql"; public string Text3Title { get; set; } = "StringBuilder参数:"; public bool TextBox3Visiable { get; set; } = true; public List FuncList { get; set; } public int funcIndex = 0; public int FuncIndex { get { return funcIndex; } set { funcIndex = value; SelectChanged(); NotifyPropertyChanged(); } } public bool RadioButton1 { get; set; } = true; public bool RadioButton2 { get; set; } = false; public bool RadioButton3 { get; set; } = false; public string RadioButton1Text { get; set; } = "Java"; public string RadioButton2Text { get; set; } = "C#"; public string RadioButton3Text { get; set; } = "JS"; public bool RadioButton1Visiable { get; set; } = true; public bool RadioButton2Visiable { get; set; } = true; public bool RadioButton3Visiable { get; set; } = true; public bool CheckBox1 { get; set; } = false; public bool CheckBox3 { get; set; } = true; public bool CheckBox2 { get; set; } = true; public bool CheckBox1Visiable { get; set; } = true; public bool CheckBox3Visiable { get; set; } = true; public bool CheckBox2Visiable { get; set; } = true; public DelegateCommand GenerateCmd { get; set; } public DelegateCommand ClearCmd { get; set; } public SQLStringBuilder封装ViewModel() { FuncList = new List() { "SQL转StringBuilder", "XML格式化", "SQL格式化", "StringBuilder转SQL", "大小写转换", "JSON格式化" }; FuncIndex = 0; GenerateCmd = new DelegateCommand(GenerateCmdFunc); ClearCmd = new DelegateCommand(ClearCmdFunc); } private void GenerateCmdFunc(object obj) { //SQL转StringBuilder if (FuncIndex == 0) { if (CheckBox1) { string text2 = FormatStyle.Basic.Formatter.Format(TextBox1); TextBox1 = text2; } List first = GetFirstContext(); List second = new List(); if (first.Count == 0) { TextBox2 = string.Empty; return; } int maxLength = GetMaxLength(GetNewList(first)); if (RadioButton3) { second.Add("var " + GetParmName() + " = \"\";"); } else { second.Add("StringBuilder " + GetParmName() + " = new StringBuilder();"); } //循环处理每一行 foreach (string str in first) { if (!CheckBox3) { if (str.Trim().StartsWith("--")) { second.Add(str.Trim().Replace("--", "//")); continue; } if (str.Contains("--")) { //分割 int index = str.IndexOf("--"); string str1 = str.Substring(0, index).TrimEnd(); string str2 = str.Substring(index, str.Length - index).Trim(); if (!CheckBox2) { second.Add(GetString2(str1, 0, CheckBox3) + " " + str2.Replace("--", "//")); } else { string retStr = GetString(str1, maxLength - System.Text.Encoding.Default.GetByteCount(str1), CheckBox3) + " " + str2.Replace("--", "//"); second.Add(retStr); } continue; } } if (!CheckBox2) { second.Add(GetString2(str, 0, CheckBox3)); } else { second.Add(GetString(str, maxLength - System.Text.Encoding.Default.GetByteCount(str), CheckBox3)); } } TextBox2 = second.GetStrArray("\r\n"); } //XML格式化 else if (FuncIndex == 1) { if (TextBox1.IsNullOrEmpty()) { TextBox2 = string.Empty; return; } TextBox2 = FormatXml(TextBox1); } //SQL格式化 else if (FuncIndex == 2) { if (TextBox1.IsNullOrEmpty()) { TextBox2 = string.Empty; return; } TextBox2 = FormatStyle.Basic.Formatter.Format(TextBox1); } //StringBuilder转SQL else if (FuncIndex == 3) { List first = GetFirstContext(); List second = new List(); if (first.Count == 0) { return; } //判断是否每一行是否以StringBuilder开头 string parmName = GetStringBuilderParmName(first[0]); if (parmName.IsNullOrEmpty()) { return; } for (int i = 1; i < first.Count; i++) { string str = first[i]; string handlerStr = HandlerString(str, parmName); if (!String.Empty.Equals(handlerStr)) { second.Add(handlerStr); } } if (second.Count != 0) { int spaceNum = second[0].IndexOf(second[0].Trim()); for (int i = 0; i < second.Count; i++) { second[i] = QuSpace(second[i], spaceNum); } } TextBox2 = second.GetStrArray("\r\n"); } //大小写转换 else if (FuncIndex == 4) { if (TextBox1.IsNullOrEmpty()) { TextBox2 = string.Empty; return; } List first = GetFirstContext(); List second = new List(); if (RadioButton1) { foreach (string str in first) { second.Add(str.ToUpper()); } } else if (RadioButton2) { foreach (string str in first) { second.Add(str.ToLower()); } } TextBox2 = second.GetStrArray("\r\n"); } //JSON格式化 else if (FuncIndex == 5) { if (TextBox1.IsNullOrEmpty()) { TextBox2 = string.Empty; return; } TextBox2 = TextBox1.FormatJson(); } } private void ClearCmdFunc(object obj) { TextBox1 = string.Empty; TextBox2 = string.Empty; } private void SelectChanged() { //SQL转StringBuilder if (FuncIndex == 0) { RadioButton1Visiable = true; RadioButton2Visiable = true; RadioButton3Visiable = true; RadioButton1Text = "Java"; RadioButton2Text = "C#"; RadioButton3Text = "JS"; CheckBox1Visiable = true; CheckBox2Visiable = true; CheckBox3Visiable = true; TextBox3Visiable = true; Button1Text = "生成"; Text3Title = "StringBuilder参数"; TextBox3 = "strSql"; } //StringBuilder转SQL else if (FuncIndex == 3) { RadioButton1Visiable = false; RadioButton2Visiable = false; RadioButton3Visiable = false; TextBox3Visiable = false; CheckBox1Visiable =false; CheckBox2Visiable =false; CheckBox3Visiable = false; Button1Text = "生成"; } //XML格式化 else if (FuncIndex == 1) { RadioButton1Visiable = false; RadioButton2Visiable = false; RadioButton3Visiable = false; TextBox3Visiable = false; CheckBox1Visiable = false; CheckBox2Visiable = false; CheckBox3Visiable = false; Button1Text = "格式化"; } //JSON格式化 else if (FuncIndex == 5) { RadioButton1Visiable = false; RadioButton2Visiable = false; RadioButton3Visiable = false; TextBox3Visiable = false; CheckBox1Visiable = false; CheckBox2Visiable = false; CheckBox3Visiable = false; Button1Text = "格式化"; } //SQL格式化 else if (FuncIndex == 2) { RadioButton1Visiable = false; RadioButton2Visiable = false; RadioButton3Visiable = false; TextBox3Visiable = false; CheckBox1Visiable =false; CheckBox2Visiable =false; CheckBox3Visiable = false; Button1Text = "格式化"; } //大小写转换 else if (FuncIndex == 4) { RadioButton1Visiable = true; RadioButton2Visiable = true; RadioButton3Visiable = false; RadioButton1Text = "转大写"; RadioButton2Text = "转小写"; RadioButton1 = true; TextBox3Visiable = false; CheckBox1Visiable = false; CheckBox2Visiable = false; CheckBox3Visiable = false; Button1Text = "转换"; } } private string FormatXml(string sUnformattedXml) { XmlDocument xd = new XmlDocument(); xd.LoadXml(sUnformattedXml); StringBuilder sb = new StringBuilder(); StringWriter sw = new StringWriter(sb); XmlTextWriter xtw = null; try { xtw = new XmlTextWriter(sw); xtw.Formatting = Formatting.Indented; xtw.Indentation = 1; xtw.IndentChar = '\t'; xd.WriteTo(xtw); } finally { if (xtw != null) xtw.Close(); } return sb.ToString(); } public string GetParmName() { string parm = TextBox3.Trim(); if (parm.IsNullOrEmpty()) { return "strSql"; } return parm; } #region 给定一个集合得到去注释后的集合 public List GetNewList(List list) { List list2 = new List(); foreach (string str in list) { //if (str.Trim().StartsWith("--")) //{ // continue; //} //if (str.Contains("--")) //{ // int index = str.IndexOf("--"); // list2.Add(str.Substring(0, index)); // continue; //} list2.Add(str.TrimEnd()); } return list2; } #endregion #region 给定一个List得到其中最长的长度 public int GetMaxLength(List list) { int maxLength = 0; foreach (string str in list) { if (System.Text.Encoding.Default.GetByteCount(str) > maxLength) { maxLength = System.Text.Encoding.Default.GetByteCount(str); } } return maxLength; } #endregion #region 获得每一行值 public string GetString(string strInfo, int spaceNum, bool appendLine) { string str = string.Empty; if (RadioButton1) { if (appendLine) { str += GetParmName() + ".append(\" " + strInfo + GetSpace(spaceNum) + " \").append(\"\\n\");"; } else { str += GetParmName() + ".append(\" " + strInfo + GetSpace(spaceNum) + " \");"; } } if (RadioButton2) { if (appendLine) { str += GetParmName() + ".Append(\" " + strInfo + GetSpace(spaceNum) + " \").AppendLine();"; } else { str += GetParmName() + ".Append(\" " + strInfo + GetSpace(spaceNum) + " \");"; } } if (RadioButton3) { if (appendLine) { str += GetParmName() + " += \" " + strInfo + GetSpace(spaceNum) + " \\n\";"; } else { str += GetParmName() + " += \" " + strInfo + GetSpace(spaceNum) + " \";"; } } return str; } public string GetString2(string strInfo, int spaceNum, bool appendLine) { string str = string.Empty; if (RadioButton1) { if (appendLine) { str += GetParmName() + ".append(\" " + strInfo + GetSpace(spaceNum) + "\").append(\"\\n\");"; } else { str += GetParmName() + ".append(\" " + strInfo + GetSpace(spaceNum) + "\");"; } } if (RadioButton2) { if (appendLine) { str += GetParmName() + ".Append(\" " + strInfo + GetSpace(spaceNum) + "\").AppendLine();"; } else { str += GetParmName() + ".Append(\" " + strInfo + GetSpace(spaceNum) + "\");"; } } if (RadioButton3) { if (appendLine) { str += GetParmName() + " += \" " + strInfo + GetSpace(spaceNum) + "\\n\";"; } else { str += GetParmName() + " += \" " + strInfo + GetSpace(spaceNum) + "\";"; } } return str; } #endregion #region 补空格 public string GetSpace(int num) { string str = string.Empty; for (int i = 0; i < num; i++) { str += " "; } return str; } #endregion #region 得到上面文本的每一行值 public List GetFirstContext() { List list = new List(); string content = TextBox1; if (string.Empty.Equals(content.Trim())) { return list; } if (content.Contains("\t")) { content = content.Replace("\t", " "); } content = content.Replace("\r", ""); string[] str = content.Split('\n'); foreach (string strings in str) { if (!string.Empty.Equals(strings.Trim())) { list.Add(strings.TrimEnd()); } } return list; } #endregion private string QuSpace(string str, int spaceNum) { string space = string.Empty; for (int i = 0; i < spaceNum; i++) { space += " "; } if (!str.Contains(space)) { return str; } return str.Substring(str.IndexOf(space) + spaceNum, str.Length - str.IndexOf(space) - spaceNum); } private string HandlerString(string str, string parmName) { if (str.Contains(parmName + ".Append")) { //得到StringBuilder中间的词 string sqlStr = GetStringBuilderText(str, parmName + ".Append"); //得到注释 string zhushi = GetZhuShi(str); //拼接 if (string.Empty.Equals(zhushi)) { return sqlStr.TrimEnd(); } else { return sqlStr.TrimEnd() + " --" + zhushi; } } if (str.Contains(parmName + ".append")) { //得到StringBuilder中间的词 string sqlStr = GetStringBuilderText(str, parmName + ".append"); //得到注释 string zhushi = GetZhuShi(str); //拼接 if (string.Empty.Equals(zhushi)) { return sqlStr.TrimEnd(); } else { return sqlStr.TrimEnd() + " --" + zhushi; } } return string.Empty; } private string GetStringBuilderText(string str, string startStr) { startStr = startStr + "(\""; str = str.Substring(str.IndexOf(startStr), str.IndexOf("\")") - str.IndexOf(startStr)); str = str.Substring(startStr.Length, str.Length - startStr.Length); return str; } private string GetZhuShi(string str) { string retStr = string.Empty; if (str.Contains(@"//")) { retStr = str.Substring(str.IndexOf("//") + 2, str.Length - str.IndexOf("//") - 2); } return retStr; } private string GetStringBuilderParmName(string str) { string parmName = String.Empty; if (!str.Contains("StringBuilder")) { return parmName; } str = str.Substring(str.IndexOf("StringBuilder"), str.IndexOf("=") - str.IndexOf("StringBuilder")); str = str.Substring(str.IndexOf(" "), str.Length - str.IndexOf(" ")); parmName = str.Trim(); return parmName; } } }