打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA基础入门(40)读取LF换行的文本文件

今天说说读取文本内容的问题:

以前分享过用LineInput读取txt文本文件

但是LineInput这种方式读取的一行其实是读到换行符CRLF(回车),如果读取的文本不是以CRLF这种方式进行换行的话,那读取的内容就是有问题的。

像下图这样用LF来换行的文件,我们看看还用之前的方式读到Excel的效果。

Sub Test0412()Dim I As IntegerDim src As StringI = 1Open "D:\Test.txt" For Input As #1Do Until EOF(1)    Line Input #1, src        Sheets("ReadFile").Range("A" & I) = src    I = I + 1LoopClose #1End Sub

上面代码执行后,发现把txt文本的内容都读到一个格子里面去了,并不是我们想要的结果,debug来看一下为什么?

Debug发现,应该是换行符的问题,导致一下子把文件的所有内容读到src中去了。

那怎么办呢,怎么才能让他们分开呢?在想把字符串分开的时候有没有人,一瞬间就想到了split了呢

Sub Test0412_1()Dim I As IntegerDim src As StringI = 0Open "D:\Test.txt" For Input As #1Line Input #1, srcDo Until I = UBound(Split(src, vbLf))      Sheets("ReadFile").Range("A" & I + 1) = Split(src, vbLf)(I)    I = I + 1LoopClose #1End 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 FileSystemObjectDim F As TextStreamDim I As IntegerDim src As StringI = 1Set F = FSO.OpenTextFile("D:\Test.txt")Do Until F.AtEndOfLine    src = F.ReadLine    Sheets("ReadFile").Range("A" & I) = src    I = I + 1LoopF.CloseEnd Sub

看下执行效果


下期分享,如何把文本中的每一行的数据按空格分开。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
用VBA代码查询两列数据差异
关于treeview的节点,如何将数组保存到选择的节点中
Excel VBA 怎么赋予一段文本值给剪贴板,还请赐教
VBA判断Word的选择性粘贴是否选择无格式文本
Excel-VBA将单元格区域的内容转换为下拉列表
VBA
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服