sábado, 17 de diciembre de 2011

C# Extraer Lineas de un Archivo con Expresión Regular


este pequeño fragmento de código nos permite recorrer un directorio de forma recursiva procesando uno a uno los archivos en dicho directorio para extraer lineas de estos archivos que encajen en una expresión regular definida.

me resulto util para consolidar información de varios archivos de log de IIS, donde ademas tenia que extraer un segmento del texto encajado en la expresion regular (algo asi como /image.aspx/150 y necesitaba los codigos de las imagenes)

private static void Main(string[] args) {
            var salida = new StreamWriter(".\\out.txt");

            string dir = ".";

            if (args.Count() > 0) {
                dir = args[0];
            }

            Regex regExp = new Regex(@"POST");

            string[] filePaths = Directory.GetFiles(dir, "*.log"SearchOption.AllDirectories);

            foreach (string file in filePaths) {
                Console.WriteLine("file " + file);
                using (StreamReader r = new StreamReader(file)) {
                    string line;
                    while ((line = r.ReadLine()) != null) {
                        Match match = regExp.Match(line);
                        if (match.Success) {
                            salida.WriteLine(line);
                        }
                    }
                }
            }
            salida.Close();
            Console.ReadKey();
        }




es una buena plantilla para recorrer varios archivos linea por linea, podemos agregar mas expresiones regulares o hacer otras acciones con las lineas que nos resulten interesantes.


una parte muy importante, es como obtener la lista de archivos de un tipo dado en un directorio.


string[] filePaths = Directory.GetFiles(dir, "*.log"SearchOption.AllDirectories);