zoukankan      html  css  js  c++  java
  • 利用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的更强大功能,在如果遇到更特殊要求的时候,再从网上查查吧。时间关系,不细说了。

  • 相关阅读:
    进程池和线程池、协程、TCP单线程实现并发
    GIL全局解释锁,死锁,信号量,event事件,线程queue,TCP服务端实现并发
    进程补充和线程的介绍
    进程的介绍和使用
    异常处理和UDP Socket套接字
    TCP Socket 套接字 和 粘包问题
    网络编程
    面向对象高级——反射和元类
    面向对象三大特性之——多态和一些内置函数
    面向对象-内置方法
  • 原文地址:https://www.cnblogs.com/Ricky81317/p/1434787.html
Copyright © 2011-2022 走看看