'将以上你给的例子数据拷贝放到一个文本文件c:\text.txt中
'经过分析,你的文本文件的第一行是以制表符分割,而其他的则是以不定数的空格分割,不是特别有规律,所以在转之前要分别处理,过程FormatTxt就是起这个作用
'程序将生成一个格式化后以"|"为分割符的文本文件c:\zz.txt和一个数据库c:\a.mdb和一个格式符号文件c:\schema.ini
Private Sub StartChange()
Call WriteTempSchemia("zz.txt", "|") '空格吗?
Call FormatTxt("c:\test.txt", "c:\zz.txt")
Call TxtToMdb("c:\", "zz.txt", "c:\a.mdb", "NewTempTable")
End Sub
Public Sub WriteTempSchemia(strFileName As String, strSeparator As String)
'写入格式符号文件
Open "c:\Schema.ini" For Output As #1
Print #1, "[" & strFileName & "]"
Print #1, "Format=Delimited(" & strSeparator & ")"
Close #1
End Sub
Private Sub TxtToMdb(sTxtPath As String, sTxtFileName As String, sAccessFullFileName As String, sAccessTable As String)
'功能:将文本文件导入到Access中的表
'调用:Call TxtToMdb("c:\","zz.txt","c:\a.mdb","NewTempTable")
'结果:将c:\zz.txt导入到c:\a.mdb中的NewTempTable表中
Dim db As DAO.Database
On Error Resume Next
Set db = DBEngine.CreateDatabase(sAccessFullFileName, dbLangGeneral)
If Err.Number = 3204 Then
Set db = Workspaces(0).OpenDatabase(sAccessFullFileName)
End If
On Error GoTo err_exit
db.Execute "SELECT * into " & sAccessTable & " FROM [Text;HDR=NO;DATABASE=" & sTxtPath & "]." & sTxtFileName
db.Close
Set db = Nothing
Exit Sub
err_exit:
Set db = Nothing
MsgBox Err.Description
End Sub
Private Sub FormatTxt(strFromName As String, strToName As String)
'开始格式化文本文件
Dim strTmp As String
Dim strArray() As String
Dim a() As String
Dim i As Integer
Dim flag As Boolean
Dim j As Integer
Dim k As Integer
Dim p As String
Dim q As String
Open strFromName For Input As #1
strTmp = StrConv(InputB(LOF(1), #1), vbUnicode)
Close #1
strArray = Split(strTmp, vbCrLf)
For i = 0 To UBound(strArray)
k = k + 1
strTmp = ""
If k = 1 Then
Open strToName For Output As #1
flag = True
a() = Split(strArray(i), vbTab)
For j = 0 To UBound(a)
strTmp = strTmp & "|" & a(j)
Next j
Print #1, Right(strTmp, Len(strTmp) - 1)
Else
strTmp = strArray(i)
For j = 0 To Len(strTmp)
If Trim(Left(strTmp, 1) & "|") <> "|" Then
p = p & Left(strTmp, 1)
Else
If p <> "" Then
q = q & "|" & p
p = ""
End If
End If
If Len(strTmp) <= 1 Then
strTmp = strTmp
Else
strTmp = Right(strTmp, Len(strTmp) - 1)
End If
Next j
If Len(q) >= 1 Then Print #1, Right(q, Len(q) - 1)
q = ""
End If
Next i
If flag Then Close #1
End Sub
Private Sub Command1_Click()
Call StartChange
End Sub