Con questo post riprendo una breve discussione di qualche anno fa, in cui il problema esposto riguardava lo scorrimento di un file di testo “riga per riga”, con la presenza di righe vuote.
Infatti, con il seguente codice, all’arrivo di una riga vuota, l’esecuzione esce dal ciclo:
do
buf=str.readline
…
loop while buf=nothing
L’altro difetto di questo frammento di codice, anche ammettendo che non esistano righe vuote all’interno delle “righe valide” è che deve esserci una riga vuota alla fine del file, altrimenti non viene rilevata la fine del file e il programma solleva un’eccezione.
La soluzione migliore è questa:
Using sr As New System.IO.StreamReader(nomeFile)
Do Until sr.EndOfStream
Try
Dim sBuf As String = sr.ReadLine
‘ fai qualcosa (1)
Catch ex As Exception
‘ gestisci l’eccezione
End Try
Loop
End Using
Infatti, l’uso di sr.EndOfStream permette di rilevare la fine effettiva del file, indipendentemente dal contenuto delle righe.
Attenzione che nella sezione Try (1) dovete inserire del codice per leggere il contenuto della riga e se questo contenuto consiste in una riga vuota, dovete scartare la riga (ovvero ignorarla).