lunedì, luglio 30, 2007

LINQ e Filesystem

La potenza di linq è veramente incredibile,
linq è utilizzabile già su molti tipi come ad esempio i vettori di stringhe,
come ho dimostrato nel post precedente, si può utilizzare questa caratteristica,
assieme ad un altra nuova features di VS 2008 ovvero gli extension method per interrogare in maniera intelligente il filesystem

ad esempio, supponiamo di voler selezionare alcuni files in base ad un espressione regolare, sappiamo che Directory.getFiles ritorna un Array di String..

sarebbe bello poter aggiungere un metodo generico per validare una stringa rispetto a una regular expression..
scopriamo che grazie all' aggiunta del extension method è possibile.
Tutto ciò che dobbiamo fare è creare una classe statica e aggiungere i nostri metodi statici in questo modo:


public static class extension {
public static bool Match(this string me, string regExp){
System.Text.RegularExpressions.Regex rg=
new System.Text.RegularExpressions.Regex(regExp);

return rg.IsMatch(me);
}
}


il this prima del string me aggiunge questa funzione a tutte le stringhe
sarà quindi possibile ora fare "".Match("") !!!
Supponiamo di avere la seguente cartella C:\TEST:



proviamo ora a leggere dalla directory c:\TEST tutti i files che terminano con txt
e facciamoci tornare un po di proprietà del file

var selection =

from file in System.IO.Directory.GetFiles("C:\\TEST")
where file.Match("txt$")
select new {
Path = file,
Name = new System.IO.FileInfo(file).Name,
CreationDate = new System.IO.FileInfo(file).CreationTime,
Directory = new System.IO.FileInfo(file).DirectoryName
};


gridview1.DataSource = selection;
gridview1.DataBind();

testiamo ed ecco il risultato:

Visual studio 2008 and framework 3.5

In questi giorni sto smanettando con la nuova versione di visual studio e soprattutto con LINQ e le query syntax

per esempio supponiamo di avere una lista di nomi e cognomi in questo formato "cognome nome" e di volere ordinare per nome..
un operazione che può sembrare semplice ma che in realtà è piu complicata del previsto..

utilizzando le query syntax e usando LINQ è possibile risolvere quest' operazione in poche righe ad esempio:


var developers = new String[]{
"Carlesso Cristian",
"Giammarchi Andrea",
"Scott Guthrie"
};

var selections = from dev in developers
orderby dev.Split(' ')[1]
select dev;

gridview1.DataSource = selections;
gridview1.DataBind();

vediamo passo per passo quello che ho fatto:
con

var developers = new String[]{
..
}

ho definito un vettore di 3 stringhe nel formato "cognome nome"
da notare che ho utilizzato var anzichè l' equivalente String[]



var selections = from dev in developers
orderby dev.Split(' ')[1]
select dev;

ecco in tutto il suo splendore la query syntax,
tradotta in italiano equivarebbe a qualcosa come:
per ogni stringa contenuta all' interno di developers creami una variabile temporanea
dev che contiene la stringa, poi ordinami le stringhe in base
alla parte a destra dello split ottenuto considerando spazio come token
e ritornami il risultato all' interno di selections



gridview1.DataSource = selections;
gridview1.DataBind();

con queste 2 istruzioni andiamo a popolare un gridview di una pagina aspx

lanciamo il debug e vediamo in output il seguente risultato:





bello ma non mi piace molto il titolo della colonna della GridView.. Item non ha molto senso dopotutto...
perciò torniamo sul codice e modifichiamo la query in

var selections = from dev in developers
orderby dev.Split(' ')[1]
select new {Developer = dev};


cosi facendo abbiamo rinominato la colonna....

e nel frattempo vi ho mostrato qualcosa che sarà molto più utile in uno dei prossimi post..

lunedì, luglio 02, 2007

Giulietta e Romeo 2003

Se non ricordo male nel mio primo post in questo Blog dissi che avrei parlato di Teatro...
solo oggi, con grande ritardo, inizio a proporre i miei vecchi spettacoli scolastici

Ecco il link al mio primo spettacolo uploadato,
questa è ciò che considero la mia peggior interpretazione,
dizione da paura(con notabile intercalare dialettico),
sono riuscito a dimenticare una battuta e recitavo con dei maghi, anzi oserei dire
dei professionisti, dell' impallaggio (ovvero quando l'attore che recita ha una persona davanti che lo nasconde),
siamo andati troppo veloci e ho probabilmente creato troppo rumore e mi muovevo troppo,
dopotutto è teatro scolastico ma questa mia interpretazione è ben al di sotto delle mie reali capacità artistiche, anche se lo spettacolo successivo(recitato subito dopo) andò molto meglio.
Purtroppo non esiste ripresa del 2 spettacolo.
Degno di nota alcuni attori che recitavano con me.


..Ma nulla in confronto al duo formato dal sottoscritto e il grandissimo Filippetto ...che però proporrò più avanti
(non appena verrò in possesso degli originali)
Buona visione