使用vba从文本中提取信息

时间:2013-05-07 09:15:00

标签: vba ms-access access-vba

我想从文本文件中提取一些信息。这是我文本文件中的一行,我想提取数字并将这些数字保存在数组中。

ST/X   1000.0000000000000000   1400.0000000000000000   40.0000000000000000   25.0000000000000000   12.0000000000000000  

数字的数量没有固定(即在这个例子中我有5个数字,但它可能或多或少) 数字之间总是有3个空格,但数字长度也不固定(例如1000.0000000000000000的长度为21,但12.0000000000000000的长度为19)。我写了这段代码。但我的代码的问题是它返回空格作为最后一个数字。我的代码无法正常工作 你有更好的想法让我更好地完成这项工作吗? 谢谢你的帮助和想法:)

我的代码:

 Dim lngPos As Long 
 Dim lngCount As Long 
 Dim ifile As Integer 
 Dim Xarray() As String 
 Let ifile = FreeFile 
 Dim Name As String 
 Dim xi As Integer 
 Name = util1.fDateiName("*.txt", "Text") 
'"C:\Dokumente und Einstellungen\bbastan\Desktop\test.txt" 
'Open Name For Input As ifile 

'While Not EOF(ifile) 
'Line Input #ifile, entireline 
ReDim Xarray(10) 
xi = 0 
Open Name For Input As ifile 
lngPos = 1 
While Not EOF(ifile) 
Line Input #ifile, entireline 

       Do 
        lngPos = InStr(lngPos, entireline, Space(3)) 
        If lngPos > 0 Then 
            xi = xi + 1 
            lngCount = lngCount + 1 
            lngPos = lngPos + 3 
            Xarray(xi) = Mid(entireline, lngPos, 21) 
        End If 
    Loop Until lngPos = 0 
Wend 

Dim I As Integer 
If xi > 2 Then 
MsgBox "ja" 
For I = 1 To xi - 1 
MsgBox Xarray(I) 
Next I 
Else 
MsgBox "nein" 
For I = 1 To xi 
MsgBox Xarray(I) 
Next I

1 个答案:

答案 0 :(得分:2)

VBA Split()功能可能会为您简化一些事情。它使用分隔符拆分字符串并将元素放入数组中。例如,以下测试代码......

Sub LineSplitTest()
Dim entireline As String, strArray() As String, thing As Variant
entireline = "ST/X   1000.0000000000000000   1400.0000000000000000   40.0000000000000000   25.0000000000000000   12.0000000000000000  "
strArray = Split(entireline, Space(3), -1, vbBinaryCompare)
For Each thing In strArray
    thing = Trim(thing)
    If Len(thing) > 0 Then
        Debug.Print thing
    End If
Next
Debug.Print "[done]"
End Sub

...在VBA IDE的立即窗口中打印:

ST/X
1000.0000000000000000
1400.0000000000000000
40.0000000000000000
25.0000000000000000
12.0000000000000000
[done]