Metodi disponibili per leggere file testuali di dati statistici

Abbiamo già dato la definizione di file csv. Esaminiamo adesso i metodi messi a disposizione dai linguaggi di programmazione VB.Net e C# per leggere questi file

  • Hardcode: Questo metodo, seppure sia il più semplice, non viene usato molto spesso poiché risulta poco elastico e maneggevole. Prevede la creazione di una variabile di tipo stringa: essa sarà il path o percorso del file che ci interessa importare.
// metodo hardcode

Dim NomeFile As String = "C://Statistica_Applicata/Automobili.csv"
  • StreamReader: oggetto specializzato per leggere i fil di testo che possiamo trovare in ogni linguaggio di Visual Studio e che può essere customizzato a piacimento. Proprio perché questo oggetto ci permette di intervenire manualmente (presenta quindi massima flessibilità) è anche soggetto ad errori nell’operazione di lettura. Per ottenere il path del file utilizziamo una “Open File Dialog”.Al passo successivo, che possiamo chiamare passo 2, dobbiamo installare un’oggetto in grado di leggere il path. Dopodiché dovremo poter leggere le righe di testo del file, facendo attenzione alla prima riga, che potrebbe contenere il nome delle variabili (header), e poi estrarre i dati. Questi dati dovranno poi essere memorizzati in appositi oggetti come una lista attraverso l’uso di una classe.
// ottenimento del path con una Open File Dialog

Dim ofd As New OpenFileDialog
ofd.ShowDialog()

//istanziamento del path in un oggetto

Dim sr As New System.IO.StreamReader(ofd.FileName)

//lettura delle righe del file e estrazione dei dati

Dim sr As New StreamReader(ofd.FileName)
Dim RigaH As String = sr.ReadLine()   'in questo modo leggo l'header
While Not sr.EndOfStream
 Dim RigaDati As String = sr.ReadLine()
 Dim Dati() As String = RigaDati.Split(",".ToCharArray,StringSplitOptions.RemoveEmptyEntries)
End While

//all'interno del ciclo inserirò anche una variabile con tipo la classe creata per inserire i dati.

  • TextFieldParse: soluzione messa a disposizione dalla libreria Microsoft Visual Basic. Poiché risulta specializzato nel parsing di file cvs sarà anche più robusto in relazione all’eventuale presenza di file poco comuni e che avrebbero potuto darci problemi se avessimo usato l’oggetto StreamReader: questa particolarità è dovuta alla presenza di più controlli. Se si utilizza il linguaggio Vb.Net non è richiesta l’aggiunta di una referenza, mentre se si usa il linguaggio C# si. La sintassi e i metodi utilizzati non differiscono molto dallo StreamReader; i due differiscono solo dall’inizializzazione del path, per la sostituzione del comando di spalti presente nel ciclo appena visto e per la specificazione dei delimitatori. Per questo motivo vediamo la codifica solo di queste differenze.
//inizializzazione del path

Dim tap As New Microsoft.VisualBasic.FileIO.TextFieldParse(FileName)

// comando sostitutivo dello spalti nel ciclo

tfp.ReadFilds()

//inizializzazione proprietà delimitatori

tfp.SetDelimiters(New String() {","})
tfp.CommentTokens = New String() {"#"}
tfp.HasFieldsEnclodesInQuotes = True

Una menzione speciale va fatta ai alle azione DragDrop e DragEnter. Esse permettono la lettura di un file attraverso il trascinamento della richTextBox, dopo aver abilitato questa possibilità dalle proprietà dello strumento. Vediamo ora la sintassi di questi due gestori

//nel gestore di DragEnter
If e.Data.GetDataPresent(DataFormats.FileDrop) Then e.Effect = DragDropEffects.Copy

//nel gestore DragDrop
e.Effect = DragDropEffects.None
Dim Files() As String = CTyper(e.Data.GetData(DataFormats.FileDrop), String())
For Each path In Files
 Me.RichTextBox1.AppendText(vbCrLf & path)
Next

//per richiamare il file
NomeFile = RichTextBox1.Text

E’ utile anche menzionare il metodo “Dispose()”disponibile sia per StreamReader che per TextFieldParse. Esso permette di rilasciare il file dopo le modifiche, poiché se il file viene danneggiato, altri programmi potrebbero non riuscire ad aprirlo correttamente. Per questo motivo tutte le istruzione dovrebbero andare in un TRY-CATH e il metodo Dispose() nel Finally. Questo metodo di procedere però è molto scomodo, per questo motivo è stata creata la struttura Using, che richiede che l’oggetto abbia un metodo Dispose. La presenza di questa struttura rende superfluo l’utilizzo del TRY-CATCH.

// all'inizio del codice inserisco
Using top As New Microsoft.VisualBasic.FileIO.TestFieldParse(Me.NomeFile)

//alla fine del codice
End Using

Lascia un commento

Progetta un sito come questo con WordPress.com
Comincia ora