¿Alguna vez se ha preguntado cómo buscar fácilmente entre muchos archivos o afrontar el desafío de buscar dentro de archivos en diferentes carpetas? Este artículo tiene las respuestas que estás buscando. Sumerjámonos en el mundo de la búsqueda de texto y exploremos cómo buscar varios textos o frases en diferentes archivos en diversas carpetas usando C#.

API de C# para escanear texto en archivos y carpetas

Ahora, utilizaremos la API GroupDocs.Search for .NET para explorar numerosos textos dentro de archivos de diversos formatos en carpetas. Esta biblioteca nos permite escanear texto sistemáticamente en una amplia gama de formatos de archivo, como documentos de Word, hojas de cálculo, presentaciones, archivos PDF, archivos de marcado, libros electrónicos, mensajes de correo electrónico, documentos de One Note y archivos ZIP. Para obtener una lista detallada de los formatos de archivo admitidos, consulte la documentación completa.

Tiene la opción de obtener las DLL o el instalador MSI desde la sección de descargas, o puede instalar la API en su aplicación .NET usando NuGet.

PM> Install-Package GroupDocs.Search

Buscar varios textos en archivos en carpetas usando C#

Siga estos pasos para realizar una búsqueda de texto en varios archivos dentro de varias carpetas usando C# y generar archivos de salida HTML resaltados para cada documento encontrado.

  • Cree un objeto Índice con la ruta de la carpeta de índice especificada.
  • Indexe la carpeta de documentos principal utilizando el método Agregar.
  • Defina una consulta de búsqueda con varios términos o frases.
  • Ejecute el escaneo de texto utilizando el método de búsqueda y almacene los resultados.
  • Iterar a través de los resultados de la búsqueda:
    • Recupere cada documento encontrado utilizando el método GetFoundDocument.
    • Recupere o imprima cualquier información de archivo para el documento encontrado.
    • Configure un OutputAdapter para el formato y la ruta deseados.
    • Cree un Resaltador para el documento.
    • Resalte y envíe los resultados de la búsqueda a un archivo HTML utilizando el método Resaltar.
// Búsqueda de texto en varios archivos de varios formatos de archivo dentro de varias carpetas usando C#

// Crear un índice e indexar documentos desde la carpeta especificada
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// Busque documentos que contengan la palabra 'agua' o 'no' o la frase 'Lorem ipsum'
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// Imprimir el resultado
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // Resalte los resultados de la búsqueda
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences
}

El código anterior le permite buscar textos particulares en varios archivos y crear archivos de salida HTML resaltados para cada documento encontrado.

Resultados de búsqueda de texto resaltado en formato HTML

Impresión de los resultados de la búsqueda de texto

Del resultado de la consulta de búsqueda, puede extraer más información sobre los documentos encontrados.

// Imprimir el resultado
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\tField: " + field.FieldName);
        Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);

        // Impresión de términos encontrados
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
        // Imprimir frases encontradas
        if (field.TermSequences != null)
        {
            for (int k = 0; k < field.TermSequences.Length; k++)
            {
                string sequence = string.Join(" ", field.TermSequences[k]);
                Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[k]);
            }
        }
    }
}

El siguiente será el resultado de imprimir los resultados de búsqueda anteriores obtenidos de los archivos DOCX, PDF y TXT:

Documents: 3
Total occurrences: 141
	Document: Lorem ipsum.docx
	Occurrences: 101
		Field: filename
		Occurrences: 101
			lorem ipsum		1
		Field: content
		Occurrences: 101
			non			94
			lorem ipsum		6
	Document: Lorem ipsum.pdf
	Occurrences: 1
		Field: filename
		Occurrences: 1
			lorem ipsum		1
	Document: English.txt
	Occurrences: 39
		Field: content
		Occurrences: 39
			water			39

código completo

Aquí está el código C# completo que busca colectivamente cadenas de texto y frases en múltiples archivos y carpetas:

// Búsqueda de texto en varios archivos de varios formatos de archivo dentro de varias carpetas usando C#

// Crear un índice e indexar documentos desde la carpeta especificada
Index index = new Index("path/for/indexingFolder");
index.Add("path/parent-folder/");

// Busque documentos que contengan la palabra 'agua' o 'no' o la frase 'Lorem ipsum'
string query = "water OR \"Lorem ipsum\" OR non";
SearchResult result = index.Search(query);

// Imprimir el resultado
Console.WriteLine("Documents: " + result.DocumentCount);
Console.WriteLine("Total occurrences: " + result.OccurrenceCount);
for (int i = 0; i < result.DocumentCount; i++)
{
    FoundDocument document = result.GetFoundDocument(i);

    // Resalte los resultados de la búsqueda
    OutputAdapter outputAdapter = new FileOutputAdapter(OutputFormat.Html, "/path/Highlighted-" + i + ".html");
    Highlighter highlighter = new DocumentHighlighter(outputAdapter);
    index.Highlight(document, highlighter); // Generating HTML formatted text with highlighted occurrences

    Console.WriteLine("Document: " + document.DocumentInfo.FilePath);
    Console.WriteLine("Occurrences: " + document.OccurrenceCount);
    for (int j = 0; j < document.FoundFields.Length; j++)
    {
        FoundDocumentField field = document.FoundFields[j];
        Console.WriteLine("\tField: " + field.FieldName);
        Console.WriteLine("\tOccurrences: " + document.OccurrenceCount);

        // Impresión de términos encontrados
        if (field.Terms != null)
        {
            for (int k = 0; k < field.Terms.Length; k++)
            {
                Console.WriteLine("\t\t" + field.Terms[k].PadRight(20) + field.TermsOccurrences[k]);
            }
        }
        // Imprimir frases encontradas
        if (field.TermSequences != null)
        {
            for (int k = 0; k < field.TermSequences.Length; k++)
            {
                string sequence = string.Join(" ", field.TermSequences[k]);
                Console.WriteLine("\t\t" + sequence.PadRight(30) + field.TermSequencesOccurrences[k]);
            }
        }
    }
}

Obtener una licencia gratuita o una prueba gratuita

Licencia gratuita

Obtenga una licencia temporal gratuita para explorar esta biblioteca sin restricciones.

Prueba gratis

Puedes descargar la prueba gratuita desde la sección de descargas.

API .NET para buscar dentro de archivos y carpetas

Conclusión

En este artículo, hemos investigado el escaneo de texto para buscar varios textos en numerosos archivos en varias carpetas usando C#. Comenzando con la consulta de búsqueda, exploramos varios archivos y carpetas, resaltando las palabras o frases buscadas en los respectivos archivos HTML.

Para obtener detalles completos sobre la API, se recomienda a los lectores que consulten la documentación.

Cualquier consulta o discusión adicional puede dirigirse al foro disponible.

Ver también