我现在正在为客户端维护传统的VBA / Access 2000应用程序。他们有一个客户通过电子邮件发送包含这个文本的订单
Contact: Peggy Hill
Company: Arlen Residential Mortgage Finance Co
Address: 43456 South 18939 West, Suite 47995
City: Arlen City
ContactState: TX
ContactZip: 88888
Phone: 8019990000
Email: peggy.hill@arlenmortgage.com
DateOrdered: 4/6/09
DateDue: 4/15/09
等...
应用程序有一个包含所有属性的VBA类,但无法将数据解析到适当的字段中。我的客户想要一个表单,他们可以将文本粘贴到电子邮件中,让它解析到字段以进行验证,然后写入数据库。
问题/事实:
我想创建一个CreateOrder(OrderText As String)
函数来读取表单中的文本,但我不知道如何在VBA中处理解析。
我开始使用预先输入的标记创建一个2D数组,但这似乎很笨重,因为我必须读取数组中的下一个项目,以确定何时停止接受前一个标记的数据。
建议?
答案 0 :(得分:3)
这是相当简约的;请添加您自己的错误检查。需要添加对“Microsoft Scripting Runtime”的引用
Public Function Parse(msg As String) As Dictionary
Dim i As Integer, pos As Integer
Dim line As Variant
Dim lines() As String
Dim dict As New Dictionary
lines = Split(msg, vbCrLf)
For Each line In lines()
pos = InStr(1, line, ":", vbTextCompare)
If pos <> -1 Then
dict.Add Trim$(Left$(line, pos - 1)), Trim$(Right$(line, Len(line) - pos))
End If
Next
Rem: Access values like this (with null checks):
Rem: dict("Contact"), dict("Address")
Set Parse = dict
End Function
我通过使用文本框和按钮创建一个简单的表单来使用它,并将其添加到按钮单击事件中:
Private Sub Command2_Click()
Dim dict As Dictionary
Text0.SetFocus
Set dict = Parse(Text0.text)
Debug.Print dict("Contact"), dict("Address")
Rem clear up when done
Set dict = Nothing
End Sub