VB2005导入固定宽度文本文件到Access2007表...几乎?

时间:2011-05-07 18:24:06

标签: vb.net ms-access

我正在尝试将文本文件加载到Access 2007表中。我知道你可以逐行读取文件,然后从每行创建一条记录。我试图看看是否可以通过INSERT INTO完成,而不是循环遍历所有文本行。我的文本文件不是字符分隔的,而是固定的列宽。例如:

Date  Speed    Weight  CarID    Fuel
1120  200      10000   T230     200
1112  215      11000   F3AE     160

示例中的数据具有可读性空间,但实际上数据如此聚集在一起

112020010000T230200
111221511000F3AE160

无论如何我正在尝试

    Dim sImportFolder As String = "C:\MyData"
    Dim sSource As String = "C:\data.accdb"
    Dim sImportFile As String = "week.txt"

    Dim AccessConn As New System.Data.OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sSource & ";Persist Security Info=True;Jet OLEDB:Database Password=blah")
    AccessConn.Open() 'open the connection to the database

    Dim AccessCommand As New System.Data.OleDb.OleDbCommand("INSERT INTO [tblData] ([PtDate], [PtSpeed], [PtWt], [PtCar], [PtFuel]) SELECT F1, F2, F3, F4, F5 FROM [Text;DATABASE=" & sImportFolder & ";].[" & sImportFile & "]")
    AccessCommand.Connection = AccessConn
    AccessCommand.ExecuteNonQuery()

    AccessConn.Close()

我无法弄清楚如何告诉命令数据的结构。我知道你可以使用一个模式文件,但必须有一种方法可以通过代码来完成这一任务。

AGP

1 个答案:

答案 0 :(得分:0)

这里有一个类似的问题:

Read fixed width record from text file

基本上,答案是你可以在代码中做一些简单的事情来指定模式并让它为你分手。您需要做的是循环遍历每一行,使用SubString提取数据,然后在每行中插入一次Access(效率非常高),或者您可以在循环中构建DataTable然后插入Access数据库使用DataTable。要构建DataTable,您仍需要解析数据(使用SubString或RegEx)。

相关问题