BeyondMe Lab

最新文章
时间:2008-9-18 10:20:53  分类:C#

C# 2.0操作XML

using System;
using System.Collections.Generic;

using System.Text;

using System.Xml;
using System.IO;

namespace SerialPortComm
{
    public class PortConfig
    {

        public PortConfig()
        {

        }
        /// <summary>
        /// 端口号
        /// </summary>
        public string PortName = "COM1";
        /// <summary>
        /// 波特率
        /// </summary>
        public string BaudRate = "9600";
        /// <summary>
        /// 数据位
        /// </summary>
        public string DataBits = "8";
        /// <summary>
        /// 校验位
        /// </summary>
        public string Paritys = "None";
        /// <summary>
        /// 停止位
        /// </summary>
        public string StopBits = "1";
        /// <summary>
        /// 握手协议
        /// </summary>
        public string HandShaking = "None";

    }

    public class SerialPortSetting
    {
        /// <summary>
        /// 文件路径
        /// </summary>
        public string FilePath = "config.xml";

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="FileName"></param>
        public SerialPortSetting(string FileName)
        {
            FilePath = FileName;
            fileIsExist(FileName);
        }

        /// <summary>
        /// 增加端口配置
        /// </summary>
        /// <param name="portName"></param>
        public void AddSerialPort(PortConfig pConfig)
        {
            if (!Exist(pConfig.PortName))
            {

                XmlDocument xDom = new XmlDocument();
                xDom.Load(FilePath);
                XmlNode root = xDom.SelectSingleNode("SerialPorts");
                XmlElement xPortName = xDom.CreateElement("PortName");
                xPortName.SetAttribute("Id", pConfig.PortName);

                XmlElement xSubNode1 = xDom.CreateElement("BaudRate");
                xSubNode1.InnerText = pConfig.BaudRate;
                xPortName.AppendChild(xSubNode1);

                XmlElement xSubNode2 = xDom.CreateElement("DataBits");
                xSubNode2.InnerText = pConfig.DataBits;
                xPortName.AppendChild(xSubNode2);

                XmlElement xSubNode3 = xDom.CreateElement("Paritys");
                xSubNode3.InnerText = pConfig.Paritys;
                xPortName.AppendChild(xSubNode3);

                XmlElement xSubNode4 = xDom.CreateElement("StopBits");
                xSubNode4.InnerText = pConfig.StopBits;
                xPortName.AppendChild(xSubNode4);

                XmlElement xSubNode5 = xDom.CreateElement("HandShaking");
                xSubNode5.InnerText = pConfig.HandShaking;
                xPortName.AppendChild(xSubNode5);

                root.AppendChild(xPortName);//增加端口配置
                xDom.Save(FilePath);
            }

        }

        /// <summary>
        /// 删除端口配置
        /// </summary>
        /// <param name="portName">端口名称</param>
        public void DelSerialPort(string portName)
        {

            XmlDocument xDom = new XmlDocument();
            xDom.Load(FilePath);

            XmlNodeList xmlNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
            foreach (XmlNode xn in xmlNodeList)
            {
                XmlElement xe = (XmlElement)xn;
                if (xe.GetAttribute("Id") == portName)
                {
                    xe.RemoveAll();//删除改节点及子节点
                }
            }
            xDom.Save(FilePath);

        }

        /// <summary>
        /// 返回端口配置
        /// </summary>
        /// <param name="portName">端口名称</param>
        /// <returns></returns>
        public PortConfig GetSerialPortName(string portName)
        {

            PortConfig portConfig = new PortConfig();

            XmlDocument xDom = new XmlDocument();
            xDom.Load(FilePath);
            bool has = false;
            XmlNodeList xmlNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
            foreach (XmlNode xn in xmlNodeList)
            {
                XmlElement xe = (XmlElement)xn;
                if (xe.GetAttribute("Id") == portName)
                {
                    foreach (XmlNode xchildeNode in xe.ChildNodes)
                    {
                        XmlElement xchild = (XmlElement)xchildeNode;
                        switch (xchild.Name)
                        {
                            case "BaudRate":
                                portConfig.BaudRate = xchild.InnerText ;
                                break;
                            case "DataBits":
                                portConfig.DataBits = xchild.InnerText;
                                break;
                            case "Paritys":
                                portConfig.Paritys = xchild.InnerText;
                                break;
                            case "StopBits":
                                portConfig.StopBits = xchild.InnerText;
                                break;
                            case "HandShaking":
                                portConfig.HandShaking = xchild.InnerText;
                                break;
                        }
                    }
                    has = true;
                    break;
                }
            }
            xDom.Save(FilePath);

            if (has == true)
            {
                return portConfig;
            }
            else
            {
                return null;
            }


        }

        /// <summary>
        /// 增加端口配置
        /// </summary>
        /// <param name="portName"></param>
        public void EditSerialPort(PortConfig portConfig)
        {
            XmlDocument xDom = new XmlDocument();
            xDom.Load(FilePath);

            XmlNodeList xmlNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
            foreach (XmlNode xn in xmlNodeList)
            {
                XmlElement xe = (XmlElement)xn;
                if (xe.GetAttribute("Id") == portConfig.PortName)
                {
                    foreach (XmlNode xchildeNode in xe.ChildNodes)
                    {
                        XmlElement xchild = (XmlElement)xchildeNode;
                        switch (xchild.Name)
                        {
                            case "BaudRate":
                                xchild.InnerText = portConfig.BaudRate;
                                break;
                            case "DataBits":
                                xchild.InnerText = portConfig.DataBits;
                                break;
                            case "Paritys":
                                xchild.InnerText = portConfig.Paritys;
                                break;
                            case "StopBits":
                                xchild.InnerText = portConfig.StopBits;
                                break;
                            case "HandShaking":
                                xchild.InnerText = portConfig.HandShaking;
                                break;
                        }
                    }
                    break;
                }
            }
            xDom.Save(FilePath);

        }

        /// <summary>
        /// 判断端口配置是否存在
        /// </summary>
        /// <param name="portName"></param>
        /// <returns></returns>
        public bool Exist(string portName)
        {

            XmlDocument xDom = new XmlDocument();
            xDom.Load(FilePath);
            XmlNodeList xNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
            bool find = false;
            foreach (XmlNode xmlNode in xNodeList)
            {

                XmlElement xe = (XmlElement)xmlNode;
                if (xe.GetAttribute("Id") == portName.Trim())
                {
                    find = true;
                    break;

                }
            }
            return find;
        }

        /// <summary>
        /// 判断文件是否存在
        /// </summary>
        /// <param name="FilePath"></param>
        public void fileIsExist(string FilePath)
        {
            if (!File.Exists(FilePath))
            {

                XmlDocument xDom = new XmlDocument();

                XmlElement xmlRoot = xDom.CreateElement("SerialPorts");
                xDom.AppendChild(xmlRoot);
                xDom.Save(FilePath);
            }
        }
    }
}

C# 3.5 Linq操作XML

using System;
using System.Collections.Generic;

using System.Text;

using System.Xml;
using System.IO;

namespace SerialPortComm
{
    public class PortConfig
    {

        public PortConfig()
        {

        }
        /// <summary>
        /// 端口号
        /// </summary>
        public string PortName = "COM1";
        /// <summary>
        /// 波特率
        /// </summary>
        public string BaudRate = "9600";
        /// <summary>
        /// 数据位
        /// </summary>
        public string DataBits = "8";
        /// <summary>
        /// 校验位
        /// </summary>
        public string Paritys = "None";
        /// <summary>
        /// 停止位
        /// </summary>
        public string StopBits = "1";
        /// <summary>
        /// 握手协议
        /// </summary>
        public string HandShaking = "None";

    }

    public class SerialPortSetting
    {
        /// <summary>
        /// 文件路径
        /// </summary>
        public string FilePath = "config.xml";

        /// <summary>
        /// 构造函数
        /// </summary>
        /// <param name="FileName"></param>
        public SerialPortSetting(string FileName)
        {
            FilePath = FileName;
            fileIsExist(FileName);
        }

        /// <summary>
        /// 增加端口配置
        /// </summary>
        /// <param name="portName"></param>
        public void AddSerialPort(PortConfig pConfig)
        {
            if (!Exist(pConfig.PortName))
            {

                XmlDocument xDom = new XmlDocument();
                xDom.Load(FilePath);
                XmlNode root = xDom.SelectSingleNode("SerialPorts");
                XmlElement xPortName = xDom.CreateElement("PortName");
                xPortName.SetAttribute("Id", pConfig.PortName);

                XmlElement xSubNode1 = xDom.CreateElement("BaudRate");
                xSubNode1.InnerText = pConfig.BaudRate;
                xPortName.AppendChild(xSubNode1);

                XmlElement xSubNode2 = xDom.CreateElement("DataBits");
                xSubNode2.InnerText = pConfig.DataBits;
                xPortName.AppendChild(xSubNode2);

                XmlElement xSubNode3 = xDom.CreateElement("Paritys");
                xSubNode3.InnerText = pConfig.Paritys;
                xPortName.AppendChild(xSubNode3);

                XmlElement xSubNode4 = xDom.CreateElement("StopBits");
                xSubNode4.InnerText = pConfig.StopBits;
                xPortName.AppendChild(xSubNode4);

                XmlElement xSubNode5 = xDom.CreateElement("HandShaking");
                xSubNode5.InnerText = pConfig.HandShaking;
                xPortName.AppendChild(xSubNode5);

                root.AppendChild(xPortName);//增加端口配置
                xDom.Save(FilePath);
            }

        }

        /// <summary>
        /// 删除端口配置
        /// </summary>
        /// <param name="portName">端口名称</param>
        public void DelSerialPort(string portName)
        {

            XmlDocument xDom = new XmlDocument();
            xDom.Load(FilePath);

            XmlNodeList xmlNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
            foreach (XmlNode xn in xmlNodeList)
            {
                XmlElement xe = (XmlElement)xn;
                if (xe.GetAttribute("Id") == portName)
                {
                    xe.RemoveAll();//删除改节点及子节点
                }
            }
            xDom.Save(FilePath);

        }

        /// <summary>
        /// 返回端口配置
        /// </summary>
        /// <param name="portName">端口名称</param>
        /// <returns></returns>
        public PortConfig GetSerialPortName(string portName)
        {

            PortConfig portConfig = new PortConfig();

            XmlDocument xDom = new XmlDocument();
            xDom.Load(FilePath);
            bool has = false;
            XmlNodeList xmlNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
            foreach (XmlNode xn in xmlNodeList)
            {
                XmlElement xe = (XmlElement)xn;
                if (xe.GetAttribute("Id") == portName)
                {
                    foreach (XmlNode xchildeNode in xe.ChildNodes)
                    {
                        XmlElement xchild = (XmlElement)xchildeNode;
                        switch (xchild.Name)
                        {
                            case "BaudRate":
                                portConfig.BaudRate = xchild.InnerText ;
                                break;
                            case "DataBits":
                                portConfig.DataBits = xchild.InnerText;
                                break;
                            case "Paritys":
                                portConfig.Paritys = xchild.InnerText;
                                break;
                            case "StopBits":
                                portConfig.StopBits = xchild.InnerText;
                                break;
                            case "HandShaking":
                                portConfig.HandShaking = xchild.InnerText;
                                break;
                        }
                    }
                    has = true;
                    break;
                }
            }
            xDom.Save(FilePath);

            if (has == true)
            {
                return portConfig;
            }
            else
            {
                return null;
            }


        }

        /// <summary>
        /// 增加端口配置
        /// </summary>
        /// <param name="portName"></param>
        public void EditSerialPort(PortConfig portConfig)
        {
            XmlDocument xDom = new XmlDocument();
            xDom.Load(FilePath);

            XmlNodeList xmlNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
            foreach (XmlNode xn in xmlNodeList)
            {
                XmlElement xe = (XmlElement)xn;
                if (xe.GetAttribute("Id") == portConfig.PortName)
                {
                    foreach (XmlNode xchildeNode in xe.ChildNodes)
                    {
                        XmlElement xchild = (XmlElement)xchildeNode;
                        switch (xchild.Name)
                        {
                            case "BaudRate":
                                xchild.InnerText = portConfig.BaudRate;
                                break;
                            case "DataBits":
                                xchild.InnerText = portConfig.DataBits;
                                break;
                            case "Paritys":
                                xchild.InnerText = portConfig.Paritys;
                                break;
                            case "StopBits":
                                xchild.InnerText = portConfig.StopBits;
                                break;
                            case "HandShaking":
                                xchild.InnerText = portConfig.HandShaking;
                                break;
                        }
                    }
                    break;
                }
            }
            xDom.Save(FilePath);

        }

        /// <summary>
        /// 判断端口配置是否存在
        /// </summary>
        /// <param name="portName"></param>
        /// <returns></returns>
        public bool Exist(string portName)
        {

            XmlDocument xDom = new XmlDocument();
            xDom.Load(FilePath);
            XmlNodeList xNodeList = xDom.SelectSingleNode("SerialPorts").ChildNodes;
            bool find = false;
            foreach (XmlNode xmlNode in xNodeList)
            {

                XmlElement xe = (XmlElement)xmlNode;
                if (xe.GetAttribute("Id") == portName.Trim())
                {
                    find = true;
                    break;

                }
            }
            return find;
        }

        /// <summary>
        /// 判断文件是否存在
        /// </summary>
        /// <param name="FilePath"></param>
        public void fileIsExist(string FilePath)
        {
            if (!File.Exists(FilePath))
            {

                XmlDocument xDom = new XmlDocument();

                XmlElement xmlRoot = xDom.CreateElement("SerialPorts");
                xDom.AppendChild(xmlRoot);
                xDom.Save(FilePath);
            }
        }
    }
}

查看全文>> | 阅读(345) | 评论(0)


时间:2008-8-26 18:52:46  分类:C#

格式器一个实现IFormatter接口的对象,IFormatter定义如下:

Public interface IFormatter
{

/*其他方法*/

        // 摘要:

        //     反序列化所提供流中的数据并重新组成对象图形。

        //

        // 参数:

        //   serializationStream:

        //     包含要反序列化的数据的流。

        //

        // 返回结果:

        //     反序列化的图形的顶级对象。

        object Deserialize(Stream serializationStream);

        //

        // 摘要:

        //     将对象或具有给定根的对象图形序列化为所提供的流。

        //

        // 参数:

        //   serializationStream:

        //     格式化程序在其中放置序列化数据的流。此流可以引用多种后备存储区(如文件、网络、内存等)。

        //

        //   graph:

        //     要序列化的对象或对象图形的根。将自动序列化此根对象的所有子对象。

    void Serialize(Stream serializationStream, object graph);
}

IFormatter中的2个主要方法Serialize Deserialize ,他们分别用来执行实际的序列化和反序列化..NET中带有2个格式器,二进制的格式器(BinaryFormatter)SOAP格式器(SoapFormatter)

example:

用到的类

    [Serializable]

    public class testClass

    {

        public string UserName;

        public string PassWord;

 

    }

}

序列化和反序列化

//序列化

        static void BinaryFormatterSerialize()

        {

            testClass myClass=new testClass();

            myClass.UserName="test";

            myClass.PassWord="000";

            IFormatter formatter = new BinaryFormatter();

          

            //创建流对象

            using(Stream stream=new FileStream(@"D:\test.bin",FileMode.Create,FileAccess.Write))

            {

                //

                formatter.Serialize(stream, myClass);

               

                stream.Close();

            }

            Console.WriteLine("Serialize Successed");

        }

 

        //反序列化

        static void BinaryFormatterDeserialize()

        { 

           

 

            IFormatter formatter = new BinaryFormatter();

            testClass myClass;

 

            //创建流对象 打开二进制文件

            using (Stream stream = new FileStream(@"D:\test.bin", FileMode.Open, FileAccess.Read))

            {

                myClass = formatter.Deserialize(stream) as testClass;

                stream.Close();

            }

            Console.WriteLine("UserName:{0} -- PassWord:{1}", myClass.UserName, myClass.PassWord);

        }

Soap格式器同理,操作基本一样.

ps.

BinaryFormatter 位于System.Runtime.Serialization.Formatters.Binary命名空间

SoapFormatter位于System.Runtime.Serialization.Formatters.Soap命名空间,需要引用system.runtime.serialization.formatters.soap.dll

查看全文>> | 阅读(306) | 评论(1)


时间:2008-8-13 12:32:08  分类:C#
正则表达式特殊的类,这组类经常使用。
1 .(点)类可以与任何非换行符的字符相匹配.对字符类[^\n]的简化操作。
2 \w 类 可以对任意单词字符进行匹配。\W(W为大写)用来匹配非单词的字符,与\w功能刚好相反。
3 \d 类 可以与任何阿拉伯数字的字符相匹配.\D(D为大写)可以匹配任意的非数字字符。
4 \s与所有的空白字符相匹配,包括换行符.相当与[\f\n\r\t\v]。\S(S大写)与\s相反,匹配所有非空白字符。
 
 
字符类减法。
就是通过运用减法的功能来从自定义的字符中截取字符集或是字符范围.具有能从类中相邻近的字符范围去除去特定的字符的功能:
如:[a-z-[d-g]]表示与a-z但除去d-g之间的任意字符相匹配。
犹如:[a-z-[d-g-[e-f]]]表示表示与a-z但除去d、g任意字符相匹配。
 
 
注释表达式。
随着表达式越长,可读性就降低.对于这种情况,正则表达式提供内联注释。
注释方式:
<?#<content>),分析程序会在看到开始序列元字符(?#)并且忽略<content>这部分所有字符,直到找到下一个元字符.在构造Regex的时候使用了IngorePatternWhiteSpace选项时,就可以通过像编程语言(例如C)//结构来注释.使用符号#来注释指明并使得匹配程序忽略之后所有内容,直到这行结束.使用#注释符时候,必须确保每行都是以换行符来终止.
例如:
            string nl = Environment.NewLine;
            Regex regex = new Regex(@"(" + @"(?<key>\w+):#Math the key of a key-value pair" + nl +
                @"\s*#Optionl Whitespace" + nl +
                @"(?<value>\w+) #Math the value" + nl +
                @"(?#Option comma and/or whitespace)[,\s]*" + @")+#Can have one or more pairs", RegexOptions.IgnorePatternWhitespace);
 
条件表达式
(?(test)<true>|<false>) 类似:condition?true_s:false_s
(test)是一种评估的模式.首先程序如果能够成功匹配(test),则模式匹配程序就尝试匹配接下来的<true>,否则匹配<false>部分。
查看全文>> | 阅读(377) | 评论(1)


时间:2008-8-7 20:47:10  分类:Linq
Linq 的Set 操作....
共4个操作.Distinct、Union、Intersect、Except.

#region Set Operator

 

        /* The Distinct原型

         *

         * 功能:去掉重复的元素

         * SqlServerDistinct关键字一样

         *

         *   public static IEnumerable<T> Distinct<T>(

         *   this IEnumerable<T> source);

         * 

         */

        static void DistinctOperatorPrototype()

        {

            string[] presidents = { "Adams", "Arthur", "Buchanan", "Bush", "Carter", "Cleveland" };

 

            Console.WriteLine("presidents Count:"+presidents.Count());

            IEnumerable<string> doublePresidents = presidents.Concat(presidents);

            Console.WriteLine(" after Concat presidents Count:" + doublePresidents.Count());

 

            IEnumerable<string> DistinctPresidents = doublePresidents.Distinct();

            Console.WriteLine("after Distinct presidents Count:" + DistinctPresidents.Count());

        }

 

        /*The Union原型

         *

         * 功能:将多个集合运算成一个集合,消除重复项

         * SqlServer中关键字Union关键字一样.

         *

         * public static IEnumerable<T> Union<T>(

         *    this IEnumerable<T> first,

         *    IEnumerable<T> second);

         * 

         */

        static void UnionPrototype()

        {

            string[] presidents = { "Adams", "Arthur", "Buchanan", "Bush", "Carter", "Cleveland" };

 

            Console.WriteLine("presidents element count:{0}", presidents.Count());

 

            IEnumerable<string> first = presidents.Take(4);//取前4个元素

            IEnumerable<string> second = presidents.Skip(2);//去掉前2个元素

 

 

            Console.WriteLine("first elements count:{0}", first.Count());

            Console.WriteLine("second elements count:{0}", second.Count());

 

            IEnumerable<string> concat = first.Concat(second);

            IEnumerable<string> union = first.Union(second);

 

        

            Console.WriteLine("after concat element count:{0}", concat.Count());

            Console.WriteLine("after union element count:{0}", union.Count());

 

 

        }

 

        /*Intersect 原型

         *

         * 功能:取2个集合的交集

         *

         * public static IEnumerable<T> Intersect<T>(

         *   this IEnumerable<T> first,

         *   IEnumerable<T> second);

         *

         */

        static void IntersectPrototype()

        {

            string[] presidents = { "Adams", "Arthur", "Buchanan", "Bush", "Carter", "Cleveland" };

 

            Console.WriteLine("presidents element count:{0}", presidents.Count());

 

            IEnumerable<string> first = presidents.Take(4);//取前4个元素

            IEnumerable<string> second = presidents.Skip(2);//去掉前2个元素

 

 

            Console.WriteLine("first elements count:{0}", first.Count());

            Console.WriteLine("second elements count:{0}", second.Count());

 

            IEnumerable<string> concat = first.Concat(second);

            IEnumerable<string> intersect = first.Intersect(second);

 

            Console.WriteLine("after concat element count:{0}", concat.Count());

            Console.WriteLine("after intersect element count:{0}", intersect.Count());

        }

 

        /*Except原型

         *

         * 功能:返回的序列只包含位于第一个输入序列但不位于第二个输入序列的元素

         *

         * public static IEnumerable<T> Except<T>(

         *   this IEnumerable<T> first,

         *   IEnumerable<T> second);

         *

         *

         *

         */

        static void ExceptPrototype()

        {

            string[] presidents = { "Adams", "Arthur", "Buchanan", "Bush", "Carter", "Cleveland" };

            Console.WriteLine("presidents element count:{0}", presidents.Count());

            IEnumerable<string> first = presidents.Take(4);//取前4个元素

 

            Console.WriteLine("first elements count:{0}", first.Count());

            IEnumerable<string> except = presidents.Except(first);

            Console.WriteLine("after except element count:{0}", except.Count());

 

            foreach (string item in except)

            {

                Console.WriteLine(item);

            }

 

        }

        #endregion

查看全文>> | 阅读(354) | 评论(1)


时间:2008-8-7 17:47:50  分类:C#
正则表达式是由字面量和元字符组成。字面量指的是按照原样解释的字符,而元字符则是含有特殊意义并用来指示模式匹配程序进行的操作(如:*、+、?).如果正则表达式需匹配的字符串含有元字符,则需通过转义的方法来告诉分析程序,把他们当作字面量来对待.方法是通过在字符前加一个反斜杆(\)来实现.需要通过转义来防止当作元字符解析的字符有如下:
+、*、?、.、|、[、{、(、)、\、$、^。
查看全文>> | 阅读(350) | 评论(0)