今天工作中,遇到需要将txt文件转化到内存表dataset中,于是写了一个方法来实现:
txt文件是特定格式的,文件中,一条记录为一行,各字段之间用“|”分割(注:最后一个字段后,有”|”)各字段依次为数据库中的相应字段。
举例如下:
ID号|线路编码|车站编码|运行模式|模式设置日期|模式设置时间|
1|98|9821|06|20070913|211835|
方法如下:
1/// <summary>
2/// 文件加载
3/// </summary>
4/// <param name="FilePath">带文件名的路径</param>
5/// <param name="TableName">自定义的表名</param>
6/// <param name="FieldsInArray">自定义的表字段</param>
7/// <returns>DataSet</returns>
8public static DataSet TextFileLoader(string FilePath, string TableName, string[] FieldsInArray)
9{
10DataSet ds = new DataSet();
11DataTable dt = new DataTable(TableName);
12
13FileStream fs = File.Open(FilePath, FileMode.Open, FileAccess.Read);
14StreamReader sr = new StreamReader(fs);
15
16for (int i = 0; i < FieldsInArray.Length; i++)
17{
18dt.Columns.Add(new DataColumn(FieldsInArray[i], typeof(string)));
19}
20
21string strRead;
22bool flag = true;
23
24while (flag)
25{
26strRead = sr.ReadLine();
27
28if (!string.IsNullOrEmpty(strRead))
29{
30string[] aryVale = strRead.Split('|');
31
32DataRow dr = dt.NewRow();
33for (int k = 0; k < FieldsInArray.Length; k++)
34{
35dr[FieldsInArray[k]] = aryVale[k];
36}
37dt.Rows.Add(dr);
38}
39else
40{
41flag = false;
42}
43}
44
45ds.Tables.Add(dt);
46return ds;
47}