Dada la necesidad de realizar
la búsqueda de una palabra en particular (que debe ser remplazada más adelante)
en archivos de tipo “.congif” de ciertas aplicaciones web y servicios desplegadas
en un determinado servidor; tratándose de lo tedioso o complejo que puede
surgir dicha actividad e decido implementar un pequeño proceso que realice la
operativa de buscar el tipo de archivo y encontrar la coincidencia de una
determinada palabra que puede ser remplazada u otros fines en particular según el
caso amerite.
1. Requisitos:
Visual Studio 2017 Community
Programación C# - Console
Framework 4.6 (para desarrollo
y ejecución compilada)
2. Crear aplicación de tipo consola:
2.1.
Crear la solución de nombre ConsoleApp
2.2. Crear el proyecto de nombre ConsoleAppSearchText,
tipo de Aplicación de Consola y seleccionar el Framework 4.6:
- Se agregar la clase Program.cs, y
- El archivo App.config
3. Asignar valores a las llaves:
3.1.
App.config: Agregar valores relacionado a
la búsqueda.
Agregar la sección <appSettings></appSettings> en el archivo App.config, y sobre dicha sección
ingresar las siguientes llaves (keySearchTextValue, keyFileRouteScan y keyFileExtension) y valores (server999, \\route\of\application\web\
y .config):
<appSettings>
<add key="keySearchTextValue" value="server999" />
<add key="keyFileRouteScan" value="\\route\of\application\web\" />
<add key="keyFileExtension" value=".config" />
</appSettings>
Detalle de las llaves:
keySearchTextValue: El valor de la palabra en
particular a buscar.
keyFileRouteScan: Ruta principal del directorio
donde se ubicara e iniciara la búsqueda.
keyFileExtension: Extensión del archivo donde
se buscara la palabra en particular.
4. Implementar la solución:
4.1.
Program.cs: Implementar la solución en la
clase Program
Importar los namespace System.Collections.Generic, System.Linq,
System.Configuration y System.IO:
using System;
using System.Collections.Generic;
using System.Linq;
using
System.Configuration;
using System.IO;
4.2.
Invocar las llaves agregadas en el archivo App.config para poder leer los valores:
Para la lectura de un archivo de configuraciones se debe
importar el namespace using System.Configuration.
Crear las validables strContains, strFolderScan y strExtension
de tipo string; variables que se encargaran de
leer los valores ingresados en las llaves del archivo de configuraciones – App.config:
string strContains =
ConfigurationSettings.AppSettings["keySearchTextValue"].ToString();
string strFolderScan =
ConfigurationSettings.AppSettings["keyFileRouteScan"].ToString();
string strExtension =
ConfigurationSettings.AppSettings["keyFileExtension"].ToString();
4.3.
Leer las variables de tipo string que se asignan los
valores de las llaves ingresadas en el archivo App.config:
Proporcionar las propiedad y métodos para poder crear,
copiar, eliminar, mover o abrir archivos, en este caso lo que se realizará será
abrir cada archivo a buscar según la extensión (.config – según nuestra
implementación a elaborar para la solución del caso) y ruta de la ubicación
encontrada, para esto se debe importa el namespace using System.IO y agregar las
siguientes líneas de código:
DirectoryInfo dir = new DirectoryInfo(strFolderScan);
IEnumerable<FileInfo> fileList = dir.GetFiles("*.*",
SearchOption.AllDirectories);
Detalle de código ingresado:
DirectoryInfo dir = new DirectoryInfo(strFolderScan);
Inicializa la
instancia de la clase DirectoryInfo para realizar la lectura de la ruta de acuerdo
al valor obtenido de la validable strFolderScan, que se encarga de leer el valor de la llave keyFileRouteScan ("\\route\of\application\web\")
IEnumerable<FileInfo> fileList = dir.GetFiles("*.*",
SearchOption.AllDirectories);
Se encarga de listar en memoria
todos los archivo encontrado según la ruta inicial ingresada. Para el uso del
enumerador (IEnumerable) se debe importar el namespaces using
System.Collections.Generic;
4.4.
Construye el script de tipo LINQ
y almacenar
valores en memoria:
Almacenar la lista de archivos (según la lista en
memoria) encontrados y filtrar de acuerdo a la extensión ingresada “.congif” (según nuestra implementación a
elaborar para la solución del caso), para ello se construye el
script de tipo LINQ y se filtra de acuerdo al valor de la variable strExtension, que se encarga de leer el
valor de la llave key="keyFileExtension" value=".config"
IEnumerable<FileInfo> fileQuery =
from file in fileList
where file.Extension ==
strExtension//".config"
orderby file.Name
select file;
Para el uso
LINQ se debe importar el namespaces using System.Linq;
4.5.
Listar ubicación y línea de la coincidencia
del texto encontrado:
Recorrer la lista según el script LINQ y leer
todos los archivos de extensión “.congif” y pintar en la consola todos los valores que contiene
el texto server999
foreach (FileInfo fi in fileQuery)
{
int counter = 0;
string[] lines =
File.ReadAllLines(fi.FullName);
Console.WriteLine("LOCATION " + fi.FullName);
foreach (string line in lines)
{
counter++;
if
(line.Contains(strContains))//server999
Console.WriteLine("\t" + "LINE " + counter + " :: " + line);
}
}
Detalle de código ingresado:
La variable int counter = 0 inicializa con 0,
incrementa en el segundo foreach al recorrer el contenido del archivo ubicado.
La variable string[] lines =
File.ReadAllLines(fi.FullName) se encarga de leer línea por línea del archivo ubicado
Console.WriteLine("LOCATION
" +
fi.FullName) Encargado de
pintar toda la ubicación o ruta de cada archivo encontrado de tipo extensión “.congif”
Console.WriteLine("\t" + "LINE " + counter + " :: " + line) Encargado de pintar el número de la ubicación (counter) donde fue
encontrada la coincidencia del texto encontrado (line=”server999”) en el archivo de tipo extensión
“.congif”
Para poder conocer más acerca
de la sentencia foreach
en C# puede visitar la página de Microsoft.
5. Ejecutar solución implementado:
Resultado:
La coincidencia de la palabra server999
se ubican en la línea 15 y 22 del archivo C:\Users\...\Web – copia.config
La solución planteada pretende
agilizar la búsqueda del texto en particular en un archivo de tipo “.config” y posicionar
la línea de la coincidencia y ubicación completa del archivo donde se encontró dicha
coincidencia.
0 Comentarios