2016-01-23 113 views
2

我有一批像100,000文本文件,我想使用vba將其提取爲字符串。 在過去,我一直在這樣做這樣沒有問題:從使用vba的中文字符的文本文件中提取文本

Sub Main() 
Dim PathAndName As String 
Dim TextFile As Integer 
Dim TextString() As String 
Redim TextString(100000) 
For i = 1 To 100,000 
    PathAndName = "C:\File_" & i & ".ext" 
    TextFile = 1 
    Open PathAndName For Input As TextFile 
    TextString(i) = Input(LOF(TextFile), TextFile) 
Next i 
End Sub 

這一次,該腳本返回錯誤「輸入過去文件的結束」錯誤62 唯一的不同,我可以發現的是,這一次文本文件包含一些中文字符,這實際上並不符合我的興趣。這就是爲什麼我認爲這是問題的根源。 漢字出現在文件的第一行。

任何幫助表示讚賞。謝謝!

+0

對不起,錯過了。漢字也出現在第三行。 –

+0

'PathAndName =「C:\ File_」&i&「.ext」'應該是'PathAndName =「C:\ File_」&i&「.txt」'。並在'Next i'之前添加'Close TextFile' – iJay

回答

1

我懷疑你的文本文件現在是多字節編碼。有一個字符以兩個或三個字節編碼。所以LOF(TextFile)將不會返回正確的字符數,但字節數。但是Input(LOF(TextFile), TextFile)需要字符數,因爲它必須創建String

你可以使用:

Sub Main() 
Dim PathAndName As String 
Dim TextFile As Integer 
Dim TextString() As String 
Redim TextString(100000) 
For i = 1 To 100000 
    PathAndName = "C:\File_" & i & ".ext" 
    TextFile = 1 
    Open PathAndName For Input As TextFile 

    Dim sLine As String 
    Dim sTextString As String 
    sLine = "" 
    sTextString = "" 

    Do While Not EOF(TextFile) 
    Input #TextFile, sLine 
    sTextString = sTextString & sLine 
    Loop 

    TextString(i) = sTextString 

    Close #TextFile 

Next i 
End Sub 

但更好的辦法是使用ADODB.Stream而不是恐龍VB文件訪問方法。但這是完全不同的方法。所以你應該首先閱讀約ADODB.Stream