使用VBA读取和处理文本文件时出现问题

时间:2017-07-06 08:15:51

标签: vba excel-vba excel

我是VBA的新用户并试图阅读大尺寸的文本文件。有时也会出现一些MB大小的文本文件。

数据包括不同时间戳记中某些数字的打印结果。

我需要存储值的时间戳如下:

步骤时间已完成1.00,总时间已完成1.00

然后打印的数据如下:

90000354   1        -3.9630E-02 -3.5410E-02 -0.2695      0.4523       2.424      0.5630

现在,我想查找号码90000354并需要复制并粘贴这些数字-3.9630E-02,-3.5410E-02& -0.2695到excel表。现在,我正在使用以下代码,但它提出了问题。请帮助解决此问题。

非常感谢提前。

Option Explicit

Private Sub CommandButton1_Click()

Dim text As String, MyData As String, strData() As String, myFile As String, textLine As String

Dim v As Variant

Dim numIde As Long, i As Long

myFile = Application.GetOpenFilename("Dat Files (*.dat), *.dat")

Open myFile For Input As #1

MyData = Space$(LOF(1))

Do Until EOF(1)

    Line Input #1, textLine

    MyData = MyData & textLine & vbCrLf

Loop

Close #1

strData() = Split(MyData, vbCrLf)

numIde = 90000354

For i = LBound(strData) To UBound(strData)

    If InStr(1, strData(i), numIde, vbTextCompare) Then

        Cells(2, 2).Value = Mid(numIde, numIde + 20, 11)

        Cells(2, 3).Value = Mid(numIde, numIde + 32, 11)

        Cells(2, 4).Value = Mid(numIde, numIde + 44, 11)

        Exit For
    End If
Next i

End Sub

运行代码最终会出现如下错误:

“运行时错误'54':文件模式错误”

在尝试调试时,它停在此代码行“Get#1 ,, MyData”

1 个答案:

答案 0 :(得分:0)

LibSSL用于读取二进制数据,并且您想要阅读文本。使用Get

编辑:更新 - 这应该更好。读入每行,然后检查它。根据操作系统等的不同,可以节省使用可能识别或不识别vbCRLF的Line Input功能。

做这样的事情:

Private Sub CommandButton1_Click()

split

如果您更喜欢它的完成方式,那么我之前发布的代码有点问题。它是将每行文本附加到单个字符串,而不是将其添加为新行,因此Dim text As String, MyData As String, strData() As String, myFile As String Dim numIde As Integer Dim i As Long numIde = 90000354 myFile = Application.GetOpenFilename("Dat Files (*.dat), *.dat") Open myFile For Input As #1 Do Until EOF(1) Line Input #1, textline If InStr(1, textline, numIde, vbTextCompare) Then Cells(2, 2).Value = Mid(textline, numIde + 20, 11) Cells(2, 3).Value = Mid(textline, numIde + 32, 11) Cells(2, 4).Value = Mid(textline, numIde + 44, 11) End If Loop Close #1 函数不起作用。这里更新的代码应该有效。

Split()