[原]Sql腳本壓縮類。

精簡的美麗sql

/*
 * Sql腳本壓縮類。
 * 去掉sql語句中多餘的空格,以減小sql腳本的文本長度
 * 
 * Author   : goldli@163.com
 * DateTime : 2015/07/03
 */

using System.Text.RegularExpressions;

namespace Sp.Net.Tools
{
    internal class SqlCompressor
    {
        public static string Compress(string source)
        {
            if (string.IsNullOrEmpty(source)) return "無數據";
            //1.去掉全部註釋; 行註釋 與 塊註釋
            source = LineComment(source);
            source = BlockComment(source);
            //2.壓縮空格
            source = MultipleSpace(source);
            //3.壓縮標點符號
            source = Punctuates(source);
            return source;
        }

        /// <summary>
        /// 去掉行註釋
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        private static string LineComment(string source)
        {
            //去掉 "--" 開頭的行
            var x = Regex.Replace(source, "--.*", "", RegexOptions.IgnoreCase | RegexOptions.Multiline);

            return x;
        }

        private static string BlockComment(string source)
        {
            //去掉 "/* */" 的行
            var x = Regex.Replace(source,@"\/\*.*\*\/","",RegexOptions.IgnoreCase | RegexOptions.Singleline | RegexOptions.Multiline);

            return x;
        }

        private static string MultipleSpace(string source)
        {
            var x = Regex.Replace(source,@"\s{2,}"," ",RegexOptions.IgnoreCase | RegexOptions.Multiline);

            return x;
        }

        /// <summary>
        /// 空格在標點符號的兩側
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        private static string Punctuates(string source)
        {
            var x = Regex.Replace(source,@"\s*([\)\(\,\;\.\:\'\""\=\+\-\*\/\>\<\!\|\~\^])\s*","$1",RegexOptions.IgnoreCase | RegexOptions.Multiline);

            return x;
        }
    }
}
相關文章
相關標籤/搜索