读取文本文件并使用正则表达式对结果字符串应用

时间:2011-08-26 13:23:59

标签: excel vba

我想读取一次文本文件的内容,并在结果字符串上应用正则表达式。我一直无法弄清楚如何阅读文本文件。

有一种替代方法,我一直在尝试,但它无法正常工作

Set oFS = oFSO.OpenTextFile(sFilename)
num = 15
mynum = 1
Do Until oFS.AtEndOfStream
    'Cells(num, mynum).Value = oFS.ReadLine
     MyString = oFS.ReadLine
     If Not oFS.AtEndOfStream Then
            oFS.SkipLine

     strStrings = Split(MyString, " ")
     For intInd = LBound(strStrings) To UBound(strStrings)

         Cells(num, mynum).Value = strStrings(intInd)

         mynum = mynum + 1
         If mynum Mod 4 = 0 Then
             num = num + 1
             mynum = 1
         End If
    Next

    End If
Loop
oFS.Close
Set oFSO = Nothing

我注意到问题来自两个来源......一旦要分割的字符串长度可变,我的功能就会失败。我该怎么补丁呢?其次,我怀疑的文件内容中的一些非字符也可能导致问题。 Myfile在第三行之后有不同的空间。我能够获得前两行

DNI ROLL TEST ON 896_271209

开始定向数据测试

=> KS 32223.63 Flammas

=> SIP -7.25度

=>右90.57度

=> AZIMUTH 105.46度

=>左73.92度

=> OFFSET -1.15度

3 个答案:

答案 0 :(得分:2)

这是我之前使用的一个非常有用的代码片段,它将整个文本文件存储在一个字符串中,然后您可以使用它(如使用正则表达式)。

Dim strFile As String
Dim intFile As Long

intFile = FreeFile

Open "C:\File.txt" For Input As #intFile
   strFile = Input$(LOF(intFile), #intFile)  '  LOF returns Length of File
Close #intFile

'Do what you want with strFile

<强>更新: 实际上,这是一种我觉得更安全的方法。我甚至展示了如何使用打开的对话框获取文件名,这非常方便:

Sub test()

Dim fileString As String
Dim fileName As String

' You can use GetOpenFilename() if you like
fileName = Application.GetOpenFilename("Text Files (*.txt,*.txt")
fileString = Space(FileLen(fileName))

Open fileName For Binary As #1
    Get #1, , fileString
Close #1

' Do what you wish with fileString
MsgBox Len(fileString)
End Sub

答案 1 :(得分:1)

如果您更改此行:

Cells(num, mynum).Value = strStrings(intInd)

为:

Cells(num, mynum).Value = "'" & strStrings(intInd)

它将强制Excel将每行视为文本。我不认为它喜欢等号“=&gt;”,因为等号通常用于表示Excel中的公式。

这是我用这个改变运行时得到的输出:

enter image description here

这对我来说似乎没什么用处,但是我不确定这是否会提供您正在寻找的输出 - 您没有提供有关输出需要的详细信息。但这应该有助于摆脱“应用程序定义或对象定义的错误”。

如果您希望在文本上运行RegEx,请解释您正在寻找的程序,我相信我们其中一人可以帮助您编写RegEx表达式。

答案 2 :(得分:0)

我后来得到了上面的代码..

Set oFS = oFSO.OpenTextFile(sFilename)
num = 15
mynum = 1
Do Until oFS.AtEndOfStream
    'Cells(num, mynum).Value = oFS.ReadLine
     MyString = oFS.ReadLine

     Do While InStr(MyString, "  ")
     MyString = Replace(MyString, "  ", " ")
    Loop


     strStrings = Split(MyString, " ")
     If UBound(strStrings) > 0 Then
     For intInd = LBound(strStrings) To UBound(strStrings)
         If Not strStrings(intInd) = "=>" Then
         Cells(num, mynum).Value = strStrings(intInd)

         mynum = mynum + 1
         If mynum Mod 5 = 0 Then
             num = num + 1
             mynum = 1
         End If
         End If
    Next
    End If