2011-05-07 4 views
0

Я пытаюсь загрузить текстовый файл в таблицу Access 2007. Я знаю, что вы можете читать файл за строкой, а затем создавать запись из каждой строки. я пытался понять, можно ли это сделать с помощью INSERT INTO, а не с помощью всех строк текста. Мой текстовый файл не является символом, а скорее фиксированной шириной столбца. Например:VB2005 Импорт фиксированной ширины текстового файла в таблицу Access2007 ... почти?

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

ответ

0

Существует аналогичный вопрос о SO здесь:

Read fixed width record from text file

В принципе, ответ в том, что там не то, что просто вы можете сделать в коде, чтобы задать схему и пусть он расстается за вас. То, что вам нужно будет сделать, это либо пройти через каждую строку, вытащив данные с помощью SubString, а затем сделав одну вставку в Access для каждой строки (не очень эффективно), или вы можете построить DataTable в цикле, а затем сделать вставку в Access используя DataTable. Чтобы построить DataTable, вам все равно придется анализировать свои данные (используя SubString или RegEx).

+0

Я в замешательстве от всего этого. Access/Jet/ACE не имеет проблем с чтением файлов фиксированной ширины, если вы определяете ширину столбца. Это можно сделать с помощью мастера импорта из Access, а затем спецификацию импорта (и/или файл schema.ini) можно затем использовать в коде из внешнего Access. –

+0

ok i gotcha. но я действительно хотел подойти к нему без зависимости от внутренней спецификации Access или файла schema.ini. Возможно, это не может быть сделано, и в этом случае у меня не будет выбора. – sinDizzy

+0

Я не могу придумать никакого способа сделать это, кроме как открыть файл напрямую и пройти. Но вы все равно должны знать, где границы столбцов должны что-то сделать из этого, поэтому я не вижу, как этот подход будет превосходить описанные альтернативы. –

Смежные вопросы