varios una texto por palabra extension exacta consola como buscar archivos string vba find text-files

string - una - grep buscar palabra exacta



¿Cómo encuentro una cadena específica en uno de muchos archivos de texto.log usando VBA? (3)

Este es el código que tengo hasta ahora para encontrar todos los archivos de registro en una carpeta. Pero necesito ser capaz de encontrar una cadena específica en cada archivo, si se encuentra en un archivo, deje de buscar y salga del ciclo e informe en qué nombre de archivo estaba.

Parece que hay tantas formas diferentes de abrir un archivo y buscarlo que no sé cuál es el mejor y normalmente no uso VBA, pero es todo a lo que tengo acceso en este momento.

En una nota lateral, habría un máximo de 36 archivos de registro y cada archivo máximo de 5 MB cada uno.

Sub StringExistsInFile() Dim TheString As String TheString = "MAGIC" Dim StrFile As String StrFile = Dir("c:/MyDownloads/*.log") Do While Len(StrFile) > 0 ''Find TheString in the file ''If found, debug.print and exit loop Loop End Sub

Encontré este código pero parece en 2007+ versiones de Excel VBA Application.FileSearch fue eliminado:

Sub FindText() ''http://www.mrexcel.com/forum/excel-questions/68673-text-file-search-excel-visual-basic-applications.html Dim i As Integer ''Search criteria With Application.FileSearch .LookIn = "c:/MyDownloads" ''path to look in .FileType = msoFileTypeAllFiles .SearchSubFolders = False .TextOrProperty = "*MAGIC*" ''Word to find in this line .Execute ''start search ''This loop will bring up a message box with the name of ''each file that meets the search criteria For i = 1 To .FoundFiles.Count MsgBox .FoundFiles(i) Next i End With End Sub


Este código:

  • busca todas las extensiones de archivo *.log C:/MyDownloads/

  • abre cada archivo *.log y lee cada línea

  • si se encuentra theString MAGIC , imprime el nombre del archivo en el Immediate Widnow ( CTRL + G )

Sub StringExistsInFile() Dim theString As String Dim path As String Dim StrFile As String Dim fso As New FileSystemObject Dim file As TextStream Dim line As String theString = "MAGIC" path = "C:/MyDownloads/*.log" StrFile = Dir(path & "*.log") Do While StrFile <> "" ''Find TheString in the file ''If found, debug.print and exit loop Set file = fso.OpenTextFile(path & StrFile) Do While Not file.AtEndOfLine line = file.ReadLine If InStr(1, line, theString, vbTextCompare) > 0 Then Debug.Print StrFile Exit Do End If Loop file.Close Set file = Nothing Set fso = Nothing StrFile = Dir() Loop End Sub


Application.FileSearch se eliminó en 2007+ versiones de Excel. Hace un tiempo, encontré esta función que lo replica. Lo he usado ocasionalmente, pero normalmente creo que solo uso FileSystemObject o Dir .

Sub FileSearch() '' '' Example of FileSearchByHavrda procedure calling as replacement of missing FileSearch function in the newest MS Office VBA '' 01.06.2009, Author: P. Havrda, Czech Republic '' Dim sDir As String sDir = Range("K3").Value Dim FileNameWithPath As Variant Dim ListOfFilenamesWithParh As New Collection '' create a collection of filenames Dim rCount As Long ''row counter '' Filling a collection of filenames (search Excel files including subdirectories) Call FileSearchByHavrda(ListOfFilenamesWithParh, sDir, "*.xls", False) '' Print list to immediate debug window and as a message window For Each FileNameWithPath In ListOfFilenamesWithParh '' cycle for list(collection) processing Debug.Print FileNameWithPath & Chr(13) ''MsgBox FileNameWithPath & Chr(13) rCount = Application.WorksheetFunction.CountA(Range("A:A")) + 1 ActiveSheet.Cells(rCount, 1).Value = FileNameWithPath Next FileNameWithPath '' Print to immediate debug window and message if no file was found If ListOfFilenamesWithParh.Count = 0 Then Debug.Print "No file was found !" MsgBox "No file was found !" End If End Sub ''//------------------------------------------------------------------------------------------------ Private Sub FileSearchByHavrda(pFoundFiles As Collection, pPath As String, pMask As String, pIncludeSubdirectories As Boolean) '' '' Search files in Path and create FoundFiles list(collection) of file names(path included) accordant with Mask (search in subdirectories if enabled) '' 01.06.2009, Author: P. Havrda, Czech Republic '' Dim DirFile As String Dim CollectionItem As Variant Dim SubDirCollection As New Collection '' Add backslash at the end of path if not present pPath = Trim(pPath) If Right(pPath, 1) <> "/" Then pPath = pPath & "/" '' Searching files accordant with mask DirFile = Dir(pPath & pMask) Do While DirFile <> "" pFoundFiles.Add pPath & DirFile ''add file name to list(collection) DirFile = Dir '' next file Loop '' Procedure exiting if searching in subdirectories isn''t enabled If Not pIncludeSubdirectories Then Exit Sub '' Searching for subdirectories in path DirFile = Dir(pPath & "*", vbDirectory) Do While DirFile <> "" '' Add subdirectory to local list(collection) of subdirectories in path If DirFile <> "." And DirFile <> ".." Then If ((GetAttr(pPath & DirFile) And vbDirectory) = 16) Then SubDirCollection.Add pPath & DirFile DirFile = Dir ''next file Loop '' Subdirectories list(collection) processing For Each CollectionItem In SubDirCollection Call FileSearchByHavrda(pFoundFiles, CStr(CollectionItem), pMask, pIncludeSubdirectories) '' Recursive procedure call Next End Sub


No fui a la segunda pregunta, pero en la primera pregunta, ¡algo tiene defectos! En la linea

path = "C: / MyDownloads / *. log"

no use la opción "* .log", la ruta debería ser solo "C: / MyDownloads /"