2016-05-13 60 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 –

相关问题