读取txt文件,并用其他格式显示

这篇博客参照http://www.cnblogs.com/insus/archive/2013/08/08/3247078.html

题目是这样的:

一个txt文件,内容格式:

39.4% 2013-07-09 15-38-79

35.7 2013-08-09 15-38-59

39.4% 2013-07-09 15-38-79

35.7 2013-08-09 15-38-59

39.4% 2013-07-09 15-38-79

35.7 2013-08-09 15-38-59

39.4% 2013-07-09 15-38-79

35.7 2013-08-09 15-38-59

39.4% 2013-07-09 15-38-79 35.7 2013-08-09 15-38-59

现在要想这样输出:

|39.4%|2013-07-0915-38-79|35.7|2013-08-0915-38-59|
|35.7|2013-08-0915-38-59|39.4%|2013-07-0915-38-79|
|35.7|2013-08-0915-38-59|35.7|2013-08-0915-38-59|

直接贴代码:我的代码跟原帖由些不同。我的代码中用的是ref(不需先赋值,out得先赋值),另外我这里一个方法用的是静态函数,一个用非静态,其实道理都是一样。

 class Program
    {
        static void Main(string[] args)
        {
          string[] lines = File.ReadAllLines("../../ReadLineToAnotherTypeOfShow.txt"); 

          List<ChangeClass> ccList=new List<ChangeClass> ();
          ChangeClass ccItem = null;

          foreach(string line in lines)
          {
               //方法一
              //ChangeClass cc = new ChangeClass();
              //cc.TryParse(line,ref ccItem);
             //方法二
              if( ChangeClass2.TryParse(line,ref ccItem)) 
                ccList.Add(ccItem);
          }



          for (int i = 1; i < ccList.Count;i=i+2 )
          {
            Console.WriteLine("|"+ccList[i-1]+"|"+ccList[i]+"|");
          }

          Console.ReadKey();
          
        }


        
    }

    partial class ChangeClass
    {
        protected  string e1;
        protected  string e2;

        public ChangeClass() { }
        public ChangeClass(string e1,string e2)
        {
            this.e1 = e1;
            this.e2 = e2;
        }

        public bool TryParse(string singelLine,ref ChangeClass item)
        {
            if (string.IsNullOrEmpty(singelLine.Trim()))
            { 
             return false;
            }
            string[] array = singelLine.Trim().Split(' ');

            if (array[0] == "" || array[1] == "" || array[2] == "")
                return false;

            e1 = array[0].ToString();
            e2 = array[1] + array[2].ToString();

            item = new ChangeClass(e1,e2);
            return true;
        }

        public override string ToString()
        {
            return "" + e1 + "|" + e2 + "";
        }

    }

    partial class ChangeClass2
    {
        protected static string E1;
        protected static string E2;

        public ChangeClass2(string e1, string e2)
        {
            E1 = e1;
            E2 = e2;
        }

        public static bool TryParse(string singelLine, ref ChangeClass item)
        {
            if (string.IsNullOrEmpty(singelLine.Trim()))
            {
                return false;
            }
            string[] array = singelLine.Trim().Split(' ');

            if (array[0] == "" || array[1] == "" || array[2] == "")
                return false;

            E1 = array[0].ToString();
            E2 = array[1] + array[2].ToString();

            item = new ChangeClass(E1, E2);
            return true;
        }

        public override string ToString()
        {
            return "" + E1 + "|" + E2 + "";
        }

    }

  总结上面的几个知识点:1。从changclass2可以发现,其实静态变量也是可以通过构造函数赋值的。

                                      2、我们也可以通过静态的类型构造函数对静态赋值,但是,不能有参数,形如: static ChangeClass2(){E1=10;}//

通过静态变量赋值,必须是常量。

                                      3、ref和out都引用同一个内存块,不同是,声明ref的变量不需赋值,而out变量要提前赋值;

                                      4.这个方法中还有一种思想:

                                                     通过foreach和迭代器结合,操作数组。我们通过在classchange类中重写头string()方法,导致在main()中调用console.writline(classchange的实例),会直接调用重写的头string()方法,从而输出我们自己想要的结果;

 

 

 

posted @ 2013-08-09 10:47  Jackvin  阅读(377)  评论(0编辑  收藏  举报