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

利用ADO.NET的OleDb方式可以像读取数据库的表一样读取特定格式的文本文件。所谓的特定格式,通常有以下要求:

  • 文件的扩展名,最好是txt或者csv
  • 文件内各字段之间最好用逗号(,)分隔,当然,也可以用某个特定字符分隔(比如Tab),但只限于用1个字符分隔
  • 每一行内容最好以回车结束

这里我们有一个文本文件TestData.txt,其内容为:

姓名,年龄,性别,出生日期
张三,18,男,1981-03-17
李四,24,女,1985-08-08

我们将用OleDb方式从TestData.txt中读取数据并显示到控制台中。

以下是代码:

using System;
using System.Data;
using System.Data.OleDb;

namespace ConsoleForTest
{
    
class Program
    {
        
static void Main(string[] args)
        {
            OleDbConnection connect 
= new OleDbConnection();
            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";
            OleDbDataAdapter da 
= new OleDbDataAdapter("SELECT * FROM [TestData.txt]", connect);
            DataTable dt 
= new DataTable();
            da.Fill(dt);

            
foreach (DataColumn col in dt.Columns)
            {
                Console.Write(
"{0}\t", col.ColumnName);
            }
            Console.WriteLine();

            
foreach (DataRow row in dt.Rows)
            {
                
for (int i = 0; i < dt.Columns.Count; i++)
                {
                    Console.Write(
"{0}\t", row[i].ToString());
                }
                Console.WriteLine();
            }

            Console.WriteLine();

            Console.Read();
        }
    }
}

注意代码中连接字符串中的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文件,其内容格式类似如下:

[TestData.txt]
ColNameHeader
=True
Format
=CSVDelimited
MaxScanRows
=88
CharacterSet
=OEM

[TestDataTwo.csv]
ColNameHeader
=True
Format
=TabDelimited
MaxScanRows
=88
CharacterSet
=OEM

[TestDataThree.csv]
ColNameHeader
=True
Format
=Delimited(|)
MaxScanRows
=88
CharacterSet
=OEM

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

原文地址:https://www.cnblogs.com/Ricky81317/p/1434787.html