利用ADO.NET讀取文字檔的方法

來源:互聯網
上載者:User

利用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的更強大功能,在如果遇到更特殊要求的時候,再從網上查查吧。時間關係,不細說了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.