在VBA中逐行读取/parsing文本文件
我试图用VBAparsing文本文档,并返回文本文件中给出的path。
例如,文本文件如下所示:
*Blah blah instructions *Blah blah instructions on line 2 G:\\Folder\...\data.xls D:\\AnotherFolder\...\moredata.xls
我希望VBA一次加载1行,如果它以*
开始,然后移动到下一行(类似于被注释的行)。 对于具有文件path的行,我想把这个path写入单元格,比如A2
表示第一个path, B2
表示下一个,等等。
我希望能够回答的主要问题是:
1.使用VBA读取文本文件的最佳/简单方法是什么?
2.我该怎么做,一行一行?
对于一个文本文件的最基本的阅读,使用open
例:
Dim FileNum As Integer Dim DataLine As String FileNum = FreeFile() Open "Filename" For Input As #FileNum While Not EOF(FileNum) Line Input #FileNum, DataLine ' read in data 1 line at a time ' decide what to do with dataline, ' depending on what processing you need to do for each case Wend
我发现带有TxtStream的FileSystemObject是读取文件最简单的方法
Dim fso As FileSystemObject: Set fso = New FileSystemObject Set txtStream = fso.OpenTextFile(filePath, ForReading, False)
然后,使用这个txtStream
对象,你可以使用各种intellisense拾取的工具(不像使用FreeFile()
方法),所以猜测就less了。 另外,你不必分配一个FreeFile,并希望它自从你分配它的时候实际上仍然是免费的。
你可以阅读一个文件,如:
Do While Not txtStream.AtEndOfStream txtStream.ReadLine Loop txtStream.Close
注:这需要参考Microsoft脚本运行时。
为了完整性; 与加载到内存中的数据一起工作;
dim hf As integer: hf = freefile dim lines() as string, i as long open "c:\bla\bla.bla" for input as #hf lines = Split(input$(LOF(hf), #hf), vbnewline) close #hf for i = 0 to ubound(lines) debug.? "Line"; i; "="; lines(i) next
您可以使用此代码逐行阅读文本文件,您也可以检查有关第一个字符是“*”,那么你可以离开..
Public Sub Test() Dim ReadData as String Open "C:\satheesh\myfile\file.txt" For Input As #1 Do Until EOF(1) Line Input #1, ReadData 'Adding Line to read the whole line, not only first 128 positions If Not Left(ReadData, 1) = "*" then '' you can write the variable ReadData into the database or file End If Loop Close #1 End Sub