venerdì 5 agosto 2011

How To: use linq for text file statistics C#

Dopo il progetto per contare le linee di una soluzione in C# mi sono domandato se Linq potesse tornarmi in qualche modo utile per avere qualche info in più sul file letto.

E devo dire che sono rimasto piacevolmente stupito perchè l'idea che mi ero fatto è buona e funziona.

Posto che leggendo un file con StreamReader().ReadToEnd().Slipt(new char[]{'\n'});
si ottenga un array di righe... ed è così, ci si può sbizzarrire in ogni tipo di ricerca sul file, senza ammazzarsi con regular expression.

Questo è il mio file d'esempio giusto per comprendere se il tutto poteva andare:

prima riga

seconda riga

// questa sara contanta come commento


/// questa anche

/// questa pure


Stupendo vero ? Ha tutto quello che mi serve per il mio esempio

class Program
{
public static void Main(string[] args)
{
TextReader tr = new StreamReader("d:/demo.txt");
string[] lines = tr.ReadToEnd().Split(new char[] { '\n' });
tr.Close();

int empty = lines.Count(c => c.Trim() == "");
int comment = lines.Count(c => c.Replace("\t", "").StartsWith("//"));

int total = lines.Count() - (empty + comment);

Console.WriteLine("vuote:" + empty);
Console.WriteLine("commentate:" + comment);
Console.WriteLine("totali:" + total);

Console.ReadLine();

}
}


Come esempio è misero, chiaramente ma è l'intento a farla da padrone.

Immaginate un file di log di 30 mega, immaginate di aprirlo per comprendere se ci
sono errori.. bhe con una 20'ina di righe di codice riuscimo a estrarre solo quello che realmente ci serve!

Nessun commento: