您现在的位置>>.Net中文社区>>.Net编程

利用ADO.NET读取文本文件的方法

浏览量: 作者:佚名 来源:互联网

利用ADO.NET的OleDb方式可以像读取数据库的表一样读取特定格式的文本文件。所谓的特定格式,通常有以下要求:
文件的扩展名,最好是txt或者csv
文件内各字段之间最好用逗号(,)分隔,当然,也可以用某个特定字符分隔(比如Tab),但只限于用1个字符分隔
每一行内容最好以回车结束
这里我们有一个文本文件TestData.txt,其内容为:
姓名,年龄,性别,出生日期
张三,18,男,1981-03-17
李四,24,女,1985-08-08
我们将用OleDb方式从TestData.txt中读取数据并显示到控制台中。
以下是代码:

  1. using System; 
  2. using System.Data; 
  3. using System.Data.OleDb; 
  4.  
  5. namespace ConsoleForTest 
  6.     class Program 
  7.     { 
  8.         static void Main(string[] args) 
  9.         { 
  10.             OleDbConnection connect = new OleDbConnection(); 
  11.             connect.ConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\工作区\练习和测试\TestSolution\ConsoleForTest\bin\Debug\;Extended Properties='Text;HDR=Yes;FMT=Delimited;IMEX=1';Persist Security Info=False"
  12.             OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [TestData.txt]", connect); 
  13.             DataTable dt = new DataTable(); 
  14.             da.Fill(dt); 
  15.  
  16.             foreach (DataColumn col in dt.Columns) 
  17.             { 
  18.                 Console.Write("{0}\t", col.ColumnName); 
  19.             } 
  20.             Console.WriteLine(); 
  21.  
  22.             foreach (DataRow row in dt.Rows) 
  23.             { 
  24.                 for (int i = 0; i < dt.Columns.Count; i++) 
  25.                 { 
  26.                     Console.Write("{0}\t", row[i].ToString()); 
  27.                 } 
  28.                 Console.WriteLine(); 
  29.             } 
  30.  
  31.             Console.WriteLine(); 
  32.  
  33.             Console.Read(); 
  34.         } 
  35.     } 

意代码中连接字符串中的DataSource参数和命令脚本中的TestData.txt是写死的,实际应用时可能需要动态改写。
最终输出结果为:
姓名 年龄 性别 出生日期
张三 18 男 1981-03-17 0:00:00
李四 24 女 1985-08-08 0:00:00
在连接字符串中,Data Source应该是目标文件的路径。Extended Properties中的Text表明是文本文件,FMT表明文件格式,CSVDelimited或Delimited表明是以逗号为分隔符,HDR=yes表明第一行为字段名行,IMEX=1表明将混合数据转换为文本,默认情况下,如果某列前8行数据中都是纯数字,则此列为数字类型,否则转换为字符类型。
对于命令脚本,From后面跟着文件名就可以了,文件名最好用中括号括起来。
如果文本文件的分隔符比较特殊,则可以在需要读取的文本文件所在的文件夹内,创建一个schema.ini文件,其内容格式类似如下:

  1. [TestData.txt] 
  2. ColNameHeader=True 
  3. Format=CSVDelimited 
  4. MaxScanRows=88 
  5. CharacterSet=OEM 
  6.  
  7. [TestDataTwo.csv] 
  8. ColNameHeader=True 
  9. Format=TabDelimited 
  10. MaxScanRows=88 
  11. CharacterSet=OEM 
  12.  
  13. [TestDataThree.csv] 
  14. ColNameHeader=True 
  15. Format=Delimited(|) 
  16. MaxScanRows=88 
  17. CharacterSet=OEM 

其中,定义了3个文件的不同要求,第一个以逗号分隔,第二个以Tab分隔,第三个以“|”分隔。schema.ini的更强大功能,在如果遇到更特殊要求的时候,再从网上查查吧。时间关系,不细说了。

本站部份资源来于互联网,只供学习之用,不得用于商业,如有侵犯版权请联系告知,本站将第一时间删除!
站长QQ:373638128 邮箱:navy1015@126.com
copyright © 2008 .Net中文社区 ASPXCS.NET™.All Rights Reserved 滇ICP备08102132号