Vediamo in questa terza ed ultima parte del tutorial dedicato all'utilizzo della libreria FileHelpers, come si può creare dinamicamente la classe per la gestione dei file di testo.
Prendendo spunto dal progetto precedente, vediamo come scrivere un oggetto di classe creato dinamicamente.
Stesura di codice
Apriamo il nostro progetto creato nei precedenti articoli ed in visualizzazione codice, ci posizioniamo alla fine di tutto il codice, in basso, ed aggiungiamo una nuova classe
Si riporta la dichiarazione di classe senza proprietà metodi ed altro.
VB.Net
<DelimitedRecord("|")> _
Public NotInheritable Class ClasseRuntime
End Class
C#
[DelimitedRecord("|")]
public sealed class ClasseRuntime
{
}
A questo punto non ci resta che aggiunge un pulsante alla nostra form, nel quale evento click andremo a scrivere il codice che andrà a leggere un file di testo, da una classe creata dinamicamente.
Prima di scrivere il codice, bisogna aggiungere lo spazio dei nomi per la creazione di una classe a run time.
Qui di seguito si riporta tale dichiarazione
VB.Net
Imports FileHelpers.RunTime
C#
using FileHelpers.RunTime;
Ora non ci resta che scrivere il codice per l’evento click del pulsante.
Ricordiamo di dotare nel file eseguibile un file di tipo testo, impostato nel seguente modo:
1|ema|10102011
2|olga|18112012
3|ale|19052013
3|emanuele|10102014
Per l’evento click scriviamo il seguente codice.
VB.Net
Try
Dim GeneraClass As New DelimitedClassBuilder("ClasseRuntime", "|")
GeneraClass.IgnoreFirstLines = 1
GeneraClass.IgnoreEmptyLines = True
GeneraClass.AddField("Id", GetType(Int32))
GeneraClass.AddField("Descrizione", GetType(String))
GeneraClass.LastField.FieldQuoted = True
GeneraClass.AddField("Data", GetType(DateTime))
GeneraClass.LastField.TrimMode = TrimMode.Both
GeneraClass.LastField.FieldNullValue = Now
GeneraClass.LastField.Converter.Arg1 = "ddMMyyyy"
Dim engineRunTime As New FileHelperEngine(GeneraClass.CreateRecordClass())
Dim dt As DataTable = engineRunTime.ReadFileAsDT("FileTestoRunTime.txt")
If engineRunTime.ErrorManager.ErrorCount > 0 Then
engineRunTime.ErrorManager.SaveErrors("Errors.txt")
End If
For conta As Integer = 0 To dt.Rows.Count - 1
MessageBox.Show(dt.Rows(conta)("Descrizione").ToString())
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
C#
try
{
DelimitedClassBuilder GeneraClass = new DelimitedClassBuilder("ClasseRuntime", "|");
GeneraClass.IgnoreFirstLines = 1;
GeneraClass.IgnoreEmptyLines = true;
GeneraClass.AddField("Id", typeof(Int32));
GeneraClass.AddField("Descrizione", typeof(String));
GeneraClass.LastField.FieldQuoted = true;
GeneraClass.AddField("Data", typeof(DateTime));
GeneraClass.LastField.TrimMode = TrimMode.Both;
GeneraClass.LastField.FieldNullValue = DateTime.Now;
GeneraClass.LastField.Converter.Arg1 = "ddMMyyyy";
FileHelperEngine engineRunTime = new FileHelperEngine(GeneraClass.CreateRecordClass());
DataTable dt = engineRunTime.ReadFileAsDT("FileTestoRunTime.txt");
if (engineRunTime.ErrorManager.ErrorCount > 0)
{
engineRunTime.ErrorManager.SaveErrors("Errors.txt");
}
for (int conta = 0; conta < dt.Rows.Count; conta++)
{
MessageBox.Show(dt.Rows[conta]["Descrizione"].ToString());
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Il frammento di codice, è molto semplice, in pratica la classe "DelimitedClassBuilder" permette la creazione di un classe creata dinamicamente, che accetta due parametri, il primo il nome della classe, ed il secondo il delineatore.
Dopo aver impostato le opportune informazioni, ocme il tipo e nome delle proprietà, si crea un oggetto di tipo FileHelpersEngine, dall'istanza della classe creata in precedenza.
Il metodo ReadFileAsDt, legge i dati del file di testo, e li trasforma in un oggetto di tipo "DataTable".
Conclusioni
Questo articolo conclusivo del tutorial FileHelpers, ha affrontando un argomento avanzato di questa ottima libreria gratuita, la possibilità di creare oggetti creati dinamicamente. Come si è visto anche dagli articoli precedenti, questa classe offre una grande flessbilità.
Tramite la parola download potete scaricare il file di esempio.
Download