我有一个大的固定宽度文本文件,我想逐行读取并插入数据表,或者只是将其读入数据表。如何指定一列的位置?
我还必须执行一些操作,例如为每条记录修剪列的额外空间。
我尝试了这段代码,但它只给我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 :(得分: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 Framework中已有的东西,或编写自己的分割代码,或使用第三方库
对于您自己的代码方法,我会开始为您的记录定义一个类 例如,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);
}
在循环结束时,您的列表中包含您的数据。当然,如果您只需要在数据库服务器上的另一个表中编写所有内容,则可以编写直接在循环内插入/更新数据库表的代码,并避免加载列表。