In questo articolo vedremo come utilizzare la libreria FileHelpers https://www.filehelpers.net/ una libreria open source e gratuita, che ne abbiamo parlato in un precedente articolo https://www.iprogrammatori.it/articoli/programmazione/art_utilizzare-filehelpers-library_1204.aspx con una serie di articoli.
In questo articolo vedremo come leggere un file senza che questo ha un carattere delineatore, ma tramite lunghezza fissa in modo che possiamo leggere riga per riga i vari campi.
Recentemente la libreria è stata aggiunta anche al pacchetto Nuget, con la quale è possibile scaricarla ed aggiungerla al progetto come per le altre libreria.
La gestione dei file di tipo testo, è sempre una prassi per sviluppatori di attenta analisi e soprattutto capire come gestire le informazioni che ci arrivano da file, seguendo un determinato schema.
La libreria, offre interessanti funzionalità con prestazioni decisamente ottimali permettendo di offrire ad ogni programmatore uno strumento per semplificare la stesura di programmi per l’elaborazione di testo.
Creazione del file di testo
Prima di tutto dobbiamo creare un file di testo, con il quale, elaborare i dati. Nel nostro caso, scriveremo un file, dove la prima e l’ultima riga non dobbiamo considerarla, in questo modo vediamo anche l’uso di alcune proprietà della libreria, mentre andremo ad elaborare le informazioni presenti nelle altre righe.
Qui di seguito il file di esempio.
Nome Cognome Ruolo
Emanuele Mattei Analista
Luigi Cristaldi Amministratore Delegato
Olga Foti Responsabile del personale
Fine tracciato
Come si vede, abbiamo creato un file di testo, dove abbiamo l’intestazione delle colonne, che non dovremmo elaborare, i dati (tre record) riguardante il nome, cognome e ruolo aziendale, ed una riga, quella finale che dovremmo evitare di elaborare.
A questo punto salviamo il file di testo.
Creazione del progetto
Si crea un nuovo progetto di tipo Windows Application, ed inseriamo un pulsante, il quale elaborerà il file.
Dopo aver aggiunto il pulsante alla nostra form, tramite la finestra esplora soluzione, andiamo tramite menu di scelta rapida su “esplora soluzione” selezionando la voce “Gestisci pacchetti” e scrivere nella casella dei componenti “Filehelpers” come mostrato in figura 1.
Figura 1 – la selezione del componente FileHelpers
A questo punto, tramite il pulsante “Installa” aggiungiamo al progetto tale libreria.
Stesura del codice
Ora non ci resta che scrivere il codice per l’elaborazione dei file di testo, in particolare si crea una classe che mappa la lunghezza delle varie colonne.
Per ogni proprietà dobbiamo impostare il nome che corrisponde ad una colonna, o meglio una lunghezza di testo che riteniamo contenga determinate informazioni. Quindi nel nostro caso dovremmo creare tre proprietà, una con il valore “Nome” l’altra denominata “Cognome” ed infine l’ultima con la dicitura “Ruolo”.
Dopo aver creato la classe, inseriamo lo spazio dei nomi per la gestione della libreria
VB.Net
Imports FileHelpers
C#
using FileHelpers;
Ora dobbiamo creare la classe con tre proprietà, qui di seguito il dettaglio della classe con le proprietà
VB.Net
<FixedLengthRecord()>
Public Class FileTesto
<FieldFixedLength(20)>
Public Nome As String
<FieldFixedLength(16)>
Public Cognome As String
<FieldFixedLength(29)>
Public Ruolo As String
End Class
C#
[FixedLengthRecord()]
public class FileTesto
{
[FieldFixedLength(20)]
public string Nome;
[FieldFixedLength(16)]
public string Cognome;
[FieldFixedLength(29)]
public string Ruolo;
}
Come si vedere dal frammento di codice precedente, le proprietà hanno l’attributo “FieldFixedLength” che permette di impostare la lunghezza di testo che andremo a leggere nel file di testo.
A questo punto, la nostra classe è pronta per essere utilizzata.
Ritorniamo nella nostra form, e nell’evento “Click” del pulsante, scriviamo il codice che ci permette di estrapolare il testo.
Anche per la form, inseriamo lo spazio dei nomi, qui di seguito tali dichiarazione.
VB.Net
Imports FileHelpers
C#
using FileHelpers;
Ora nell’evento click dobbiamo scrivere il codice che ci permette di estrapolare il testo.
Tramite il metodo ReadFile della classe FixedFileEngine passando come parametro la nostra classe, legge le righe del nostro file di testo, escludendo la prima e l’ultima, e genera un array della nostra classe, valorizzando le varie proprietà.
Con la proprietà ErrorCount, verifichiamo se sono presenti degli errori.
VB.Net
Private Sub btnLeggi_Click(sender As Object, e As EventArgs) Handles btnLeggi.Click
Try
Dim engineLeggiFile = New FixedFileEngine(Of FileTesto)()
engineLeggiFile.Options.IgnoreFirstLines = 1
engineLeggiFile.Options.IgnoreLastLines = 1
Dim letturaFile As FileTesto() = engineLeggiFile.ReadFile(Environment.CurrentDirectory & "\FileDaElaborare.txt")
If engineLeggiFile.ErrorManager.ErrorCount > 0 Then engineLeggiFile.ErrorManager.SaveErrors("Errore.txt")
For Each elemento In letturaFile
MessageBox.Show("Nome: " & elemento.Nome & " Cognome: " + elemento.Cognome & " Ruolo: " + elemento.Ruolo)
Next
Catch ex As Exception
MessageBox.Show("Errore: " & ex.Message)
End Try
End Sub
C#
private void btnLeggi_Click(object sender, EventArgs e)
{
try
{
var engineLeggiFile = new FixedFileEngine<FileTesto>();
//ignoro la prima ed ultima riga
engineLeggiFile.Options.IgnoreFirstLines = 1;
engineLeggiFile.Options.IgnoreLastLines = 1;
//leggo il file
FileTesto[] letturaFile = engineLeggiFile.ReadFile(Environment.CurrentDirectory + "\\FileDaElaborare.txt");
if (engineLeggiFile.ErrorManager.ErrorCount > 0)
engineLeggiFile.ErrorManager.SaveErrors("Errore.txt");
foreach (var elemento in letturaFile)
{
MessageBox.Show("Nome: " + elemento.Nome + " Cognome: " + elemento.Cognome + " Ruolo: " + elemento.Ruolo);
}
}
catch (Exception ex)
{
MessageBox.Show("Errore: " + ex.Message);
}
}
Ora non ci resta che testare il nostro programma e verificare che estrapola tutti i dati.
Conclusioni
L’articolo ha voluto fornire al lettore interessanti spunti sulla gestione dei file di testo, rilevando il testo in base alla lunghezza.
La libreria FileHelpers, offre interessanti spunti ma soprattutto funzionalità che agevolano lo sviluppo dei programmatori.
Inoltre le ottime prestazioni offerte da questa libreria nella gestione dei file dei test, garantisce affidabilità e qualità molto importanti.
L’articolo ha permesso di fornire le basi e qualcosa in più per dotare i nostri applicazioni della gestione dei file di testo, rilevando le informazioni che ci occorrono in base alla loro lunghezza.