今天工作中,遇到需要将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>
8 public static DataSet TextFileLoader(string FilePath, string TableName, string[] FieldsInArray)
9 {
10 DataSet ds = new DataSet();
11 DataTable dt = new DataTable(TableName);
12
13 FileStream fs = File.Open(FilePath, FileMode.Open, FileAccess.Read);
14 StreamReader sr = new StreamReader(fs);
15
16 for (int i = 0; i < FieldsInArray.Length; i++)
17 {
18 dt.Columns.Add(new DataColumn(FieldsInArray[i], typeof(string)));
19 }
20
21 string strRead;
22 bool flag = true;
23
24 while (flag)
25 {
26 strRead = sr.ReadLine();
27
28 if (!string.IsNullOrEmpty(strRead))
29 {
30 string[] aryVale = strRead.Split('|');
31
32 DataRow dr = dt.NewRow();
33 for (int k = 0; k < FieldsInArray.Length; k++)
34 {
35 dr[FieldsInArray[k]] = aryVale[k];
36 }
37 dt.Rows.Add(dr);
38 }
39 else
40 {
41 flag = false;
42 }
43 }
44
45 ds.Tables.Add(dt);
46 return ds;
47 }