2009-02-12 76 views
1

有沒有人想過如何在VBA中編寫動態數據解析器來從文本文件捕獲數據並將其輸入到數據庫表(ms訪問)?該表格有大約55個字段,所以我寧願編寫一個代碼,它能夠從文本中獲取字段名稱,而不是複製一大堆文本。有沒有一個聰明的方法來做到這一點,並避免運行第三方應用程序來執行任務?解析Web表單到數據表中

Web表單(從Joomla組件「PERforms」輸出)也可以附加一個XML文件,但這對於直接向Access中導入記錄似乎不兼容。

數據的格式如下(我不得不爲了增加額外的回車爲它多行:

字段1顯示:測試

字段2:測試2

字段3:這是地址

這是在窗體上一個textarea

Field4:Field4

我很好地獲取數據的某處Access可以從中提取它,它只是解析它導致我的問題。

一如既往,您的幫助是最受讚賞的。

編輯的要求:

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 2009-02-12 19:24:09

+0

您可以複製/粘貼返回的實際數據的樣本嗎? 將其格式設置爲「代碼示例」以正確顯示它。 – 2009-02-16 10:11:16

回答

1

你有沒有考慮FileSystemObject對象和文本流?它需要一點編碼,但不是那麼多。

訪問可以導入HTML表格,如果這是一個選項。

編輯參考意見。

請注意,這是一個粗略的輪廓,我沒有考慮到最後一個字段不止一行。

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