读取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()方法,从而输出我们自己想要的结果;

浙公网安备 33010602011771号