2011-08-26 49 views
2

我會讀取文本文件的內容一次,並對結果字符串應用正則表達式。我一直無法弄清楚如何閱讀文本文件。讀取文本文件並在結果字符串上使用正則表達式應用

還有就是我一直在嘗試另一種,但它不能正常工作

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試驗研究896_271209

定向數據開始測試

=> KS 32223.63 Flammas

=> SIP -7.25度

= > RIGHT 90.57 Deg

=> AZIMUTH 105.46 Deg

=> LEFT 73.92度

=> OFFSET -1.15度

+0

你是否只隔着其他線路閱讀?一旦你有文件讀入,你想申請什麼類型的正則表達式? –

回答

2

這是一個非常有用的代碼sniplet,我以前用它將整個文本文件存儲在一個字符串中,然後您可以使用它(如使用正則表達式)。

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 

UPDATE: 其實,這裏是我找到更安全的方法。我甚至已經展示瞭如何使用打開對話框,這是非常方便的獲取文件名:

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 
+0

謝謝,謝謝......這很美。 – user618677

+0

請接受答案,如果它適合你(或其他答案,如果它可以幫助你更多):) – aevanko

+0

請參閱更新。有一個更安全的方法,我完全忘了! ^^ – aevanko

1

如果改變這一行:

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

到:

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

它會強制Excel看到每個作爲文本行。我不認爲它喜歡「=>」中的等號,因爲等號通常用於表示Excel中的公式。

這裏的輸出我得到的,當我與該改變運行:

enter image description here

這似乎並沒有對我非常有用,但我不知道這是否給你正在尋找的輸出因爲 - 你沒有提供很多關於你的輸出需要的樣子的細節。不過,這應該有助於擺脫「應用程序定義或對象定義的錯誤」。

如果您希望在文本上運行RegEx,請解釋您正在尋找的程序要做的事情,並且我確信我們其中一個人可以幫助您編寫RegEx表達式。

+0

謝謝......我從你的黑客使用中學到了很棒的東西。我後來解決了它。 – user618677

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 
相關問題