Tutorial: FileHelpers Library (leggere file da classe creata run time)

Si conclude il tutorial introduttivo dell'utilizzo della libreria FileHelpers, in questa parte vedremo come utilizzare una classe creata dinamicamente per la lettura dei file di testo.

il
Sviluppatore Microsoft .Net, Collaboratore di IProgrammatori

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