使用vba从包含中文字符的文本文件中提取文本

时间:2016-01-23 09:05:08

标签: excel vba excel-vba

我有一批像100,000个文本文件,我想用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。 我能看到的唯一不同的是,这次文本文件包含一些汉字,实际上并不是我感兴趣的。这就是为什么我认为这是问题的根源。 汉字出现在文件的第一行。

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分: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