2009-02-12 2 views
1

Кто-нибудь знает, как написать динамический анализатор данных в VBA для сбора данных из текстового файла и ввода его в таблицу базы данных (доступ MS)? Форма содержит около 55 полей, поэтому я бы предпочел написать код, способный собирать имя поля из текста, чем копировать нагрузку текста. Есть ли разумный способ сделать это и избежать запуска стороннего приложения для выполнения задачи?Разбор веб-формы в таблице данных

Веб-форма (которая выводится из компонента Joomla «PERforms») также может прикреплять XML-файл, но это не похоже на простой импорт записей в Access.

Формат данных, как показано ниже (я должен был добавить дополнительные символы возврата каретки для того, чтобы отобразить на несколько строк .:

Field1: Тест

Field2: Тест 2

Field3: Это адрес

который является TEXTAREA

на форме

Field4: Field4

Я получаю данные где-то. Доступ может забрать его, это только разбор его, что вызывает у меня проблему.

Как всегда, ваша помощь очень ценится.

ПРАВКА, в соответствии с просьбой:

Role Applied For: Door Supervisor 
Title: Mr 

Full Name: John Smith 



SIA DL Badge Number: 01300114000000000 







Home Address: Catford Road,Bellingham 
London 

Home Postcode: SE1 1SE 

Nationality: Nigerian 

I certify that I am entitled to work within the United Kingdom: Yes 

Term Time Address: Sheep St, Bellingham 
London 

Term Time Postcode: se1 1se 



Evening Phone Number: 07222284806 

Mobile Number: 07922226206 

Email Address: [email protected] 

Most Recent or Current Employer: Employer.Blah 
+0

Не могли бы вы толковать : в начале строки как имени поля? Если это так, то легко разобрать текст. Если нет (т. Е. Если некоторые данные выглядят как : в начале строки), то вариант XML может быть лучше – barrowc

+0

Не могли бы вы скопировать/вставить образец фактических данных? Отформатировать его как «образец кода», чтобы он отображался правильно. –

ответ

1

Рассматривали ли вы FileSystemObject и TextStream? Это woulod немного кодирования, но не так много.

Доступ может импортировать HTML-таблицы, если это опция.

EDIT со ссылкой на комментарии.

Обратите внимание, что это грубая схема, и я не учитывал, что последнее поле имеет более одной строки.

Sub BuildTable() 
'Reference Windows Scripting Host Object Model ' 
Dim fs As FileSystemObject 
Dim f As TextStream 
Dim strfile 
Dim a, fld, fldlist, strSQL 

Set fs = CreateObject("Scripting.FileSystemObject") 

strfile = "C:\Docs\TestData.txt" 
Set f = fs.OpenTextFile(strfile) 

Do While AtEndOfStream <> True 
    If f.AtEndOfStream Then Exit Do 

    a = f.ReadLine 

    'Assumes all lines with colons have a field ' 
    ' at the start ' 
    If InStr(a, ":") > 0 Then 
     fld = Left(a, InStr(a, ":") - 1) 
     fldlist = fldlist & ",[" & fld & "] Text(250)" 
    End If 
Loop 

'Run once' 
strSQL = "CREATE TABLE ImportData (" & Mid(fldlist, 2) & ")" 

CurrentDb.Execute strSQL 
End Sub 

Sub FillTable() 
'Reference Windows Scripting Host Object Model ' 
Dim fs As FileSystemObject 
Dim f As TextStream 
Dim rs As DAO.Recordset 
Dim strfile 
Dim a, fld, dat, lastfield 

Set rs = CurrentDb.OpenRecordset("ImportData") 
lastfield = rs.Fields(rs.Fields.Count - 1).Name 

Set fs = CreateObject("Scripting.FileSystemObject") 

strfile = "C:\Docs\TestData.txt" 
Set f = fs.OpenTextFile(strfile) 

rs.AddNew 
Do While AtEndOfStream <> True 
    If f.AtEndOfStream Then Exit Sub 

    a = f.ReadLine 

    If InStr(a, ":") > 0 Then 
     'field and data, assumes all lines with ' 
     'a colon have a field ' 
     'If you have tidied the table, now is a ' 
     'good time to check that this is a field ' 
     If fld <> "" Then 
      rs(fld) = dat 

      fld = "" 
      dat = "" 

     End If 

     fld = Left(a, InStr(a, ":") - 1) 
     dat = Mid(a, InStr(a, ":") + 1) 
    Else 
     If Trim(a) <> "" Then 
      dat = dat & a 
     End If 
    End If 

    If InStr(a, lastfield) > 0 Then 
     rs(fld) = dat 

     fld = "" 
     dat = "" 

     rs.Update 
     rs.AddNew 
    End If 

Loop 
End Sub 
+0

Уход за более длинным ответом, который дает некоторые инструкции для этого? –

+0

Это будет хорошей отправной точкой, но, как уже упоминалось, есть 50+ полей, поэтому в идеале я бы хотел использовать цикл, чтобы переработать код и выбрать имя поля из текстового файла ... –

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