在指定文件中查找字符串 Function FileContains (FileName As String, SearchText As String) As Long Dim FileNumber As Integer Dim FileLength As Long Dim Chunk As String Dim ChunkStart As Long Dim FoundAt as LongConst MaxChunk = 20000 On Error GoTo FileContainsError FileNumber = FreeFile Open FileName For Binary Access Read Shared As FileNumber FileLength = LOF(FileNumber) ChunkStart = 0 Do Until ChunkStart = FileLength If FileLength - ChunkStart > MaxChunk Then Chunk = Input$(MaxChunk, FileNumber) ChunkStart = ChunkStart + MaxChunk - Len(SearchText) Else Chunk = Input$(FileLength - ChunkStart, FileNumber) ChunkStart = FileLength End If FoundAt = InStr(Chunk, SearchText) If FoundAt > 0 Then FileContains = FoundAt Exit Do End If Loop Close FileNumber Exit FunctionFileContainsError: Select Case Err Case Else MsgBox Error$ & " on file " & FileName End Select Exit Function End Function
对文件文件的读取采用textstream最方便,引用scripting run time dim objFs as new filesystemobject dim objtext as textstreamSet objText = objFS.OpenTextFile(FileName, ForReading)Do Until objText.AtEndOfStream strtext=objtext.readline .... loop 打开文件后,按行读取,判断每行是否以private sub ,private function开始,代码很简单,你完善一下就可以了。
补充一下,VB的源文件(frm,bas,cls)都是以文本文件方式存放的,不用另存为txt文件
如何用for each语句读出某个目录下的所有的.txt文件呢?
for each 不能实现你的要求'查找某种类型文件,将名称保存在数组中,Ubound(数组)的值即为文件个数 Sub aaa() Dim strFileName() As String Dim filename As String Dim j As Long j = -1 filename = Dir(路径 & "*.txt") Do While filename <> "" If filename <> "." And filename <> ".." Then j = j + 1 ReDim Preserve strFileName(j + 1) strFileName(j) = filename End If filename = Dir ' 查找下一个文件。 Loop End Sub
SoHo_Andy(冰)的方法没错,我原来就是这么写的,不过用filesystemobject更简单些 dim objfs as new filesystemobject dim objfls as files dim objfl as fileset objfls=objfs.getfiles for each objfl in objfls debug.print objfl.filename next
dim objfs as new filesystemobject dim objfls as files dim objfl as fileset objfls=objfs.getfiles("C:\aa") for each objfl in objfls debug.print objfl.filename next报错set objfls=objfs.getfiles("C:\aa")处 ,提示.getfiles类型不匹配
不好意思,是我写错了,不过你也可以看看相关的帮助啊 dim objfs as new filesystemobject dim objfls as Folder '是folder不是files,上次写错了 dim objfl as fileset objfls=objfs.getfolder("C:\") for each objfl in objfls.files debug.print objfl.filename next 这段代码是获得指定目录下的所有文件,要获得指定扩展名的文件,可以这样处理 if objfs.GetExtensionName(path)="txt" then ’path是完整路径end if
Function FileContains (FileName As String, SearchText As String) As Long
Dim FileNumber As Integer
Dim FileLength As Long
Dim Chunk As String
Dim ChunkStart As Long
Dim FoundAt as LongConst MaxChunk = 20000
On Error GoTo FileContainsError
FileNumber = FreeFile
Open FileName For Binary Access Read Shared As FileNumber
FileLength = LOF(FileNumber)
ChunkStart = 0
Do Until ChunkStart = FileLength
If FileLength - ChunkStart > MaxChunk Then
Chunk = Input$(MaxChunk, FileNumber)
ChunkStart = ChunkStart + MaxChunk - Len(SearchText)
Else
Chunk = Input$(FileLength - ChunkStart, FileNumber)
ChunkStart = FileLength
End If
FoundAt = InStr(Chunk, SearchText)
If FoundAt > 0 Then
FileContains = FoundAt
Exit Do
End If
Loop
Close FileNumber
Exit FunctionFileContainsError: Select Case Err
Case Else
MsgBox Error$ & " on file " & FileName
End Select
Exit Function
End Function
dim objFs as new filesystemobject
dim objtext as textstreamSet objText = objFS.OpenTextFile(FileName, ForReading)Do Until objText.AtEndOfStream
strtext=objtext.readline
....
loop 打开文件后,按行读取,判断每行是否以private sub ,private function开始,代码很简单,你完善一下就可以了。
Sub aaa()
Dim strFileName() As String
Dim filename As String
Dim j As Long
j = -1
filename = Dir(路径 & "*.txt")
Do While filename <> ""
If filename <> "." And filename <> ".." Then
j = j + 1
ReDim Preserve strFileName(j + 1)
strFileName(j) = filename
End If
filename = Dir ' 查找下一个文件。
Loop
End Sub
dim objfs as new filesystemobject
dim objfls as files
dim objfl as fileset objfls=objfs.getfiles
for each objfl in objfls
debug.print objfl.filename
next
dim objfls as files
dim objfl as fileset objfls=objfs.getfiles("C:\aa")
for each objfl in objfls
debug.print objfl.filename
next报错set objfls=objfs.getfiles("C:\aa")处 ,提示.getfiles类型不匹配
dim objfs as new filesystemobject
dim objfls as Folder '是folder不是files,上次写错了
dim objfl as fileset objfls=objfs.getfolder("C:\")
for each objfl in objfls.files
debug.print objfl.filename
next
这段代码是获得指定目录下的所有文件,要获得指定扩展名的文件,可以这样处理
if objfs.GetExtensionName(path)="txt" then ’path是完整路径end if
str1="Private Sub"
str2="Private"
if instr(str1,str2)>0 then
msgbox "找到了"
end if