解析Access VBA

时间:2017-07-19 03:29:43

标签: vba ms-access access-vba

我从未使用过Access VBA,但是我需要创建一个解析txt文件的模块,然后立即将其导入到表中。

txt的愚蠢是:

15686541

468469

48978965

456287

48666545

45684651

456788

我需要解析它才能

  1. 删除所有非六个字符的行/行
  2. 在第三个和第五个字符后添加逗号
  3. 最终结果如下:

    468,46,9
    
    456,28,7
    
    456,78,8
    

    所有这些必须在Access VBA模块中完成,以便导入过程变得无缝。

    非常感谢!

    抱歉打扰

2 个答案:

答案 0 :(得分:3)

这个功能可以做到 - 而且非常快:

Public Function ImportLog(ByVal Filename As String) As Long

    Dim rs      As DAO.Recordset

    Dim File    As Integer
    Dim Data    As String
    Dim Data6   As String
    Dim Records As Long

    Set rs = CurrentDb.OpenRecordset("Select Top 1 * From YourTableName")

    File = FreeFile()
    Open Filename For Input As #File

    While Not EOF(File)
        Line Input #File, Data
        If Len(Data) = 6 Then
            Data6 = Space(6 + 2) ' Space for six digits and two commas.
            ' Build field value.
            Mid(Data6, 1, 3) = Mid(Data, 1, 3)
            Mid(Data6, 4, 1) = ","
            Mid(Data6, 5, 2) = Mid(Data, 4, 2)
            Mid(Data6, 7, 1) = ","
            Mid(Data6, 8, 1) = Mid(Data, 6, 1)
            rs.AddNew
                ' Adjust "Data" to your field name.
                rs.Fields("Data").Value = Data6  
            rs.Update
            Records = Records + 1
        End If
    Wend
    Close #File
    rs.Close

    Set rs = Nothing

    ImportLog = Records

End Function

返回值是添加记录的数量。

答案 1 :(得分:0)

试试这个:

Sub Import()
    Dim fileNum As Integer
    Dim dataLine As String
    Dim column1 As String
    Dim column2 As String
    Dim column3 As String

    fileNum = FreeFile()
    Open "Filename.txt" For Input As #fileNum

    While Not EOF(fileNum)
        Line Input #fileNum, dataLine
        If Len(dataLine) = 6 Then
            column1 = Mid(dataLine, 1, 3)
            column2 = Mid(dataLine, 4, 2)
            column3 = Mid(dataLine, 6, 1)
            CurrentDb.Execute "INSERT INTO YourTable(Column1, Column2, Column3) VALUES('" & column1 & "', '" & column2 & "', '" & column3 & "')"
        End If
    Wend

    Close #fileNum
End Sub