2016-05-13 58 views
0

我有一個大的固定寬度的文本文件,我想逐行閱讀並插入到數據表中,或者只是將其讀入數據表。我怎麼能指定哪一個列到哪個位置?將固定寬度的文本文件逐行讀入數據表 - C#

我還必須執行一些操作,例如修剪每個記錄的列的額外空間。

我想這個代碼,但它給我的數據表只有3列,而不是15

string sourcePath = @"c:\\"; 
string filename = "file.txt"; 

DataTable dt; 

//Create OleDb connection object 
using (OleDbConnection cn = new OleDbConnection(@"Provider=Microsoft.Jet.OleDb.4.0;" + 
      "Data Source=" + sourcePath + ";Extended Properties=\"Text;\"")) 
{ 
    // Open connection 
    cn.Open(); 

    // Create OleDb Adapter object 
    using (OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM " + filename, cn)) 
    { 
     dt = new DataTable("Records"); 
     adapter.Fill(dt); 

     // Display results 
     dataGridView1.DataSource = dt; 
    } 
} 

樣本數據

樣品名稱.......〜地址〜市〜態〜12345聯繫人姓名123-456-7890類型付款 樣本姓名.......〜地址〜城市〜州~12345聯繫人姓名123-456-7890類型付款 樣本名稱.......〜地址城市〜州〜12345聯繫人姓名123-456-7890類型付款 樣本名稱.......〜地址城市〜州~12345聯繫人姓名123-456-7890付款方式

有介於兩者之間有很多的空間..

+0

你到目前爲止做了什麼?輸入文件的格式/結構是什麼? – techspider

+0

我試過OleDb,文件是固定寬度的文本文件 –

+0

請張貼您的數據文件的一些示例行 – techspider

回答

0

如果你想使用的OleDb文本驅動程序讀取文本文件,你需要提供一個Schema.ini文件描述的一個結構在你的文字的「記錄」(線)文件

所以假設你的文本文件包含此格式的記錄:

XXXXXYYYYYKKKKKZZZZ 

(四場,每5字符),你需要在加相同的文件夾位於您的文本提交Schema.ini文件這種結構

[file.txt] 
Format=FixedLength 
Col1=CustomerNumber Text Width 5 
Col2=CustomerName Text Width 5 
Col3=CustomerCity Text Width 5 
Col4=CustomerZIP Text Width 5 

你可以在上面

鏈接的MSDN頁面不使用OleDb的,你需要使用已有的東西在.NET框架,或寫自己找到更詳細拆分代碼或使用第三方庫

對於您自己的代碼方法,我將開始爲您的記錄定義一個類。
例如一個Customer類可能是

public class Customer 
{ 
    public string Name {get;set;} 
    public string Address {get;set;} 
    ... other fields omitted .... 
} 

那麼你定義一個List<Customer>並開始閱讀您的文件與

List<Customer> customers = new List<Customer>(); 
foreach(string line in File.ReadLines(filename) 
{ 
    Customer c = new Customer(); 
    c.Name = line.Substring(0, 10).Trim(); 
    c.Address = line.Substring(10, 15).Trim(); 
    ... and so on for all the other fields.... 

    customers.Add(c);   
} 

在循環結束時,你有你充滿了你的數據列表。當然,如果你只需要在數據庫服務器的另一個表中寫入所有內容,就可以編寫直接在循環中插入/更新數據庫表的代碼,並避免加載列表。

+0

我不想硬編碼我的文件名,它是動態的 –

+0

然後你有兩個選項。立即創建Schema.ini或創建讀取文本文件的代碼,並根據您的子字符串拆分每行。 – Steve

+0

我正在爲此目的探索filehelper –

相關問題