Ir al contenido principal

Buscar Texto en archivo config o txt – C#

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


6.      Conclusión:

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.

Se puede aplicar para archivos de tipo “.txt” cambiando la llave keyFileExtension (<add key="keyFileExtension" value=".txt" />)

Puedes descarga el código fuente desde GitHub:
 Console Applitacion in C Shared

Comentarios

Entradas más populares de este blog

Habilitar Usuario HR Oracle

Al realizar la primera instalación del Oracle, el usuario HR por defecto está bloqueado y por ende no podemos loguearnos como dicho usuario, lo que debe hacer son los siguiente pasos, aplicables para Linux o Windows.
1. Conectarse como usuario system o sysdba + contraseña haciendo uso del comando connect.
Usuario: system
Password: xxxx 


2. Hacer uso  del comando alter user hr account unlock desbloqueamos la cuenta.
alter user hr account unlock;

3. Escribimos el comando alter user HR identified by hr; con esto estamos diciendo que la contraseña será hr.

alter user HR identified by hr;

4. Ahora testeamos la conexión con el comando - conn hr/hr@xe. Si deseas después de conectarnos se puede realizar un select a la tabla employees del hr.


Resultado del select realizado
5. Con todos estos pasos realizados ya podemos logearnos desde cualquier IDE como el usuario hr  y la contraseña hr que definimos en el paso 3. 
Para finalizar nos loguearemos con el IDE Oracle SQL Developer.

Espero les sea de utilidad,…

Usuario SYS y SYSTEM - ORACLE

Usuario SYS y SYSTEM
Ambos usuario son creados de forma automática al crear la base de datos ORACLE y se otorga el rol de DBA.

SYS (password por defecto: CHANGE_ON_INSTALL).
SYSTEM (password por defecto: MANAGER).

Lo que se recomienda es cambiar el password de ambos usuarios por el tema de seguridad.

SYS:
Todas las tablas y vistas para el diccionario de datos de la base de datos están almacenados en el esquema SYS. Estas tablas y vistas son críticas para el funcionamiento de la base de datos ORACLE. Para mantener la integridad del diccionario de datos, las tablas del esquema SYS son manipulados solo por la base de datos. Nunca se debería modificar algo o crear tablas en el esquema del usuario SYS.

SYSTEM:
El usuario SYSTEM se utiliza para crear tablas y vistas adicionales que muestran información administrativa, tablas internas y vistas utilizado por varias opciones y herramientas de la base de datos ORACLE. No se recomienda utilizar el esquema SYSTEM para almacenar tablas de interés para usu…

Parámetro de entrada y salida – PL/SQL

Parámetro de entrada y salida – PL/SQL:
Los parámetros de entrada y salida no son los parámetros de inicialización de la base de datos ORACLE. Los parámetros de entra y salida son utilizados mayormente en implementaciones de funciones, procedimientos almacenados o bloques de código bajo el lenguaje del PL/SQL, se considera que ambos parámetros (entra y salida) puedan realizar operaciones en el mismo bloque PL/SQL, es decir, si enviamos un parámetro de entrada hará que cumpla cierta operación y retornara los valores de salida de dicha operación procesada de acuerdo al parámetro de ingresado. Es de acuerdo al caso que nos presenta en la implementación.
Algo importante al definir los parámetros, es saber y considerar cuántos tipos de parámetro existe si solo hablamos de entrada y salida, en realidad mi determinación seria 3 tipos:

Parámetros:

IN – entrada
OUT – salida
IN OUT – entrada salida

Parámetro IN – entrada:
El comportamiento común de estés tipos de parámetros es estar siempre pendiente d…