VBA学习笔记52:TXT文件的读取 | 您所在的位置:网站首页 › vba调用sub实例 › VBA学习笔记52:TXT文件的读取 |
学习资源:《Excel VBA从入门到进阶》第52集 by兰色幻想 读取txt文件内容方法: input:从文件中读取指定数量的字符。Input #:把数据读出放在变量里,变量用逗号分隔Line Input #:取出完整的一行搭配使用到的两个函数: EOF(文件编号) 返回文本文件结尾。LOF(文件编号) 判断文本文件的长度。一、Input读取方式 Input 函数只用于以 Input 或 Binary 方式打开的文件,返回它所读出的所有字符,包括逗号、回车符、空白列、换行符、引号和前导空格等。 例1:读取a.txt,返回每个字符及其Asc值。 ![]() ![]() 例2:把a.txt的内容一次性读取出来。 Sub d2() Dim f, mychar, n, L f = ThisWorkbook.path & "/a.txt" n = FreeFile '所有文本内容 Open f For Input As n L = LOF(n) 'LOF判断文本文件的长度(字节) mychar = Input(L - 6, n) '要减去中文字符的个数(见下方注释) Debug.Print mychar '显示到立即窗口。 Close #1 End Sub注释:LOF判断文本文件的长度是字节数,并非字符个数。英文和数字都是一个字节,中文是两个字节,而inpt是输出字符个数,所以要用字节数将去中文字符个数才能得到总的字符个数。 ![]() 二、Input#读取方式 nput #读取 input 文件号(#…),变量1,变量2,..变量Ninput #常用来读取write写的内容(分隔符为逗号,加双引号) 读非write文件会乱位。(write文件详见上篇笔记。 例3:用input #方式读取ruku.txt。 ![]() 运行结果: ![]() 可以看到入库日期不准确,数据位置也有些错位,那是因为ruku.txt不是write写入的文件。 那么我们换一个write写入的文件。 例4:用input #方式读取ruku2.txt。 ![]() 运行结果: ![]() 自动去除了多余的符号,只留下数据。 三、Line Input读取方式 Line Input 文件号,变量 取出完整的一行。例5:用Line Input方式读取ruku3.txt。(write写入的文本) ![]() 运行结果: ![]() 将所有文本内容一字不差地全部读取,没有去除write写入的符号,所以Line Input不适合write写入的文本。 四、实例——拆分文本文件示例 例:把ruku3.txt按产品拆分读取数据到各自新的文本文件中。 ![]() 达到这样的效果: ![]() 代码: Sub 拆分() Dim f, y1, y2, y3, y4, y5 Dim arr(1 To 5) '存放标题行(每个文件都需要标题行,所以要单独设置数组存放) Dim k '判断行数 f = ThisWorkbook.path & "\ruku3.txt" Open f For Input As #1 Do While Not EOF(1) Input #1, y1, y2, y3, y4, y5 k = k + 1 '如果是第一行,那就是标题行,只读取数据,不写入 If k = 1 Then arr(1) = y1: arr(2) = y2: arr(3) = y3: arr(4) = y4: arr(5) = y5 Else '根据产品名称建立新文件 Open ThisWorkbook.path & "\拆分示例\" & y2 & ".txt" For Append As #2 '如果文本的结尾为空,那就是新文件,需要先写入标题行,否则直接写入数据 If LOF(2) = 0 Then Write #2, arr(1), arr(2), arr(3), arr(4), arr(5) Write #2, y1, y2, y3, y4, y5 Else Write #2, y1, y2, y3, y4, y5 End If Close #2 End If Loop Close #1 End Sub |
CopyRight 2018-2019 实验室设备网 版权所有 |