
In C# e VB.NET esistono diversi metodi per leggere i file di testo, da cui è possibile ottenere gli stessi risultati attraverso specificazioni diverse. Rimane discrezione del programmatore decidere quale sia il metodo più adatto nelle diverse situazioni. I tre metodi principali sono:
- Hardcode;
- StreamerReader;
- TextFieldParse
Il metodo hardcode è sicuramente quello che presenta la sintassi più semplice tra tutti. Tuttavia, questa semplicità viene guadagnata a scapito di una perdita di ottimalità e precisione, nonché di leggibilità stessa. Il metodo hardcode consiste, sostanzialmente, nel definire una nuova variabile come una stringa che si inizializza specificando il percorso del file in questione (ovviamente tra apici). Di seguito sono riportati un esempio in VB.NET:
VB.NET
Dim File As String = "C://File.csv"
Il metodo StreamerReader risulta decisamente più comodo e versatile rispetto al precedente. Infatti, fornisce sia la possibilità di caricare un file direttamente da sistema, attraverso una “open file dialog” e quindi non rende necessario modificare ogni volta direttamente il codice nel caso si volesse utilizzare lo stesso programma per un set di dati diverso, sia la possibilità di caricare il file in maniera hardcoded, ovvero definendolo direttamente all’interno del codice girato e semplificato quindi, ad esempio, un’esecuzione ripetuta di un programma utilizzato su uno specifico dataset. Un esempio della versione che utilizza la versione dinamica in VB.NET e C# è la seguente:
VB.NET
'ottenimento della path del file attraverso una Open File Dialog
Dim ofd As New OpenFileDialog
ofd.ShowDialog()
'istanziamento della 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 legge l'header
While Not sr.EndOfStream
Dim RigaDati As String = sr.ReadLine()
Dim Dati() As String = RigaDati.Split(";".ToCharArray,StringSplitOptions.RemoveEmptyEntries)
End While
C#
using (StreamReader sr = new StreamReader("TestFile.txt"))
{
string line;
// Read and display lines from the file until the end of
// the file is reached.
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
L’ultimo metodo considerato è il TextFieldParse. Nonostante questo metodo risulti essere meno efficiente rispetto al StreamerReader, viene comunque spesso utilizzato per la lettura di file con estensione .csv. La principale differenza rispetto al metodo precedente sta nel fatto che, in VB.NET, questo metodo risulta già definito e non è quindi richiesta alcuna reference. Inoltre la sintassi rimane pressoché invariata, con l’eccezione dell’inizializzazione del percorso. Infatti, avviene una sostituzione del comando split e una eliminazione (o sostituzione) dei delimitatori. Un esempio di codice di questo metodo in VB.NET è il seguente:
VB.NET
Using MyReader As New Microsoft.VisualBasic.FileIO.
TextFieldParser("c:\logs\bigfile")
MyReader.TextFieldType =
Microsoft.VisualBasic.FileIO.FieldType.Delimited
MyReader.Delimiters = New String() {vbTab}
Dim currentRow As String()
'Loop through all of the fields in the file.
'If any lines are corrupt, report an error and continue parsing.
While Not MyReader.EndOfData
Try
currentRow = MyReader.ReadFields()
' Include code here to handle the row.
Catch ex As Microsoft.VisualBasic.FileIO.MalformedLineException
MsgBox("Line " & ex.Message &
" is invalid. Skipping")
End Try
End While
End Using