今天说说读取文本内容的问题:
以前分享过用LineInput读取txt文本文件
但是,LineInput这种方式读取的一行其实是读到换行符CRLF(回车),如果读取的文本不是以CRLF这种方式进行换行的话,那读取的内容就是有问题的。
像下图这样用LF来换行的文件,我们看看还用之前的方式读到Excel的效果。
Sub Test0412()
Dim I As Integer
Dim src As String
I = 1
Open "D:\Test.txt" For Input As #1
Do Until EOF(1)
Line Input #1, src
Sheets("ReadFile").Range("A" & I) = src
I = I + 1
Loop
Close #1
End Sub
上面代码执行后,发现把txt文本的内容都读到一个格子里面去了,并不是我们想要的结果,debug来看一下为什么?
Debug发现,应该是换行符的问题,导致一下子把文件的所有内容读到src中去了。
那怎么办呢,怎么才能让他们分开呢?在想把字符串分开的时候有没有人,一瞬间就想到了split了呢
Sub Test0412_1()
Dim I As Integer
Dim src As String
I = 0
Open "D:\Test.txt" For Input As #1
Line Input #1, src
Do Until I = UBound(Split(src, vbLf))
Sheets("ReadFile").Range("A" & I + 1) = Split(src, vbLf)(I)
I = I + 1
Loop
Close #1
End Sub
因为一次性把所有文本都读取到src里面去了,所以也就没必要做循环,来读取文本了,因为使用LF来换行的,所以用Split(src, vbLf)来把这个文本分成数组,因为vba中数组下标是从0开始的,Excel单元格的列是从1开始的,所以定义的I的初始值是0,需要注意的是这里的I+1与 I,Sheets("ReadFile").Range("A" & I + 1) = Split(src, vbLf)(I)。看一下执行效果。
这么做的话,如果你要读取的文本数据量很小的话,没问题,如果是大数据量的文本,代码执行会非常慢,很卡。接下来是重点想说的ReadLine。
Sub Test0412_2()
Dim FSO As New FileSystemObject
Dim F As TextStream
Dim I As Integer
Dim src As String
I = 1
Set F = FSO.OpenTextFile("D:\Test.txt")
Do Until F.AtEndOfLine
src = F.ReadLine
Sheets("ReadFile").Range("A" & I) = src
I = I + 1
Loop
F.Close
End Sub
看下执行效果
联系客服