Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
Guida al Visual Basic .NET - Scrivere un INI Reader - Parte II

Guida al Visual Basic .NET

Capitolo 63° - Scrivere un INI Reader - Parte II

<< Precedente Prossimo >>

Dopo aver spiegato e posizionato i vari controlli con le proprietà adatte, si deve stendere il codice che permette al programma di leggere i file e visualizarli correttamente. Ecco il sorgente commentato:
Class Form1
    Private Sub ReadFile(ByVal File As String)
  'Lo stream da cui leggere il file
  Dim Reader As New IO.StreamReader(File)
  'Una stringa che rappresenta ogni singola riga del file
  Dim Line As String
  'L'indice associato al numero di campi letti. Dato che ogni
  'campo costituirà una radice del grafico, bisogna sapere da
  'dove far derivare i relativi valori.
  'Questa variabile è opzionale, in quanto è possibile usare
  'la proprietà trwIni.Nodes.Count-1, poichè si aggiungono
  'valori sempre soltanto all'ultimo campo aperto
  Dim FieldCount As Int16 = -1

  'Imposta il testo della label di stato
  lblStatus.Text = "Apertura del file in corso..."

  'Finchè non si raggiunge la fine del file si continua
  'a leggere
  While Not Reader.EndOfStream
'Leggiamo una linea di file (S)
Line = Reader.ReadLine
'Se la linea è diversa da una riga vuota
If Line <> Nothing Then
    'Se la linea inizia per "[" (significa che è
    'un campo)
    If Line.StartsWith("[") Then
  'Si aumenta FieldCount, che indica quanti campi  
  'si sono già letti (in base 0)
  FieldCount += 1
  'Rimuove il primo carattere, ossia "["
  Line = Line.Remove(0, 1)
  'Rimuove dalla linea l'ultimo carattere,
  'ossia "]"
  Line = Line.Remove(Line.Length - 1, 1)
  'Aggiunge una radice alla TreeView
  trwIni.Nodes.Add(Line)
    Else
  'Altrimenti, se la linea non inzia per ";",
  'ossia non è un commento
  If Not Line.StartsWith(";") Then
'Aggiunge la linea come sotto-nodo
'dell'ultimo campo inserito. La linea
'conterrà il valore in forma
'  [nome]=[contenuto]
'Attenzione! Possono esserci commenti in
'riga, quindi si deve prima controllare
'di eliminarli
'Se l'indice del carattere ";" nella riga 
'è positivo...
If Line.IndexOf(";") > 0 Then
    'Rimuove tutto quello che viene dopo 
    'il commento
    Line = Line.Remove(Line.IndexOf(";"))
End If
trwIni.Nodes(FieldCount).Nodes.Add(Line)
  End If
    End If
End If
  End While
  'Chiude il file
  Reader.Close()

  lblStatus.Text = "File aperto"
    End Sub

    Private Sub strOpen_Click(ByVal sender As Object, _ 
  ByVal e As EventArgs) Handles strOpen.Click
  'Ecco un esempio di OpenFileDialog da codice
  Dim FOpen As New OpenFileDialog
  FOpen.Filter = "Impostazioni di configurazione|*.ini"
  If FOpen.ShowDialog = Windows.Forms.DialogResult.OK Then
ReadFile(FOpen.FileName)
  End If
    End Sub

    Private Sub strExit_Click(ByVal sender As Object, _ 
  ByVal e As EventArgs) Handles strExit.Click
  'Esce dal programma, chiudendo il form corrente
  Me.Close()
    End Sub

    Private Sub strClearList_Click(ByVal sender As Object, _ 
  ByVal e As EventArgs) Handles strClearList.Click
  'Mostra un messaggio di conferma prima di procedere
  If MessageBox.Show("Eliminare tutti gli elementi dela lista?", _ 
"INI Reader", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = _
Windows.Forms.DialogResult.No Then
'Se si risponde di no, esce dalla procedura
Exit Sub
  End If

  'Elimina tutti i nodi
  trwIni.Nodes.Clear()
    End Sub
End Class 
Il codice degli eventi è molto semplice, mentre più interessante è quello della procedura ReadFile. Per avere una panoramica delle operazioni sulle stringhe usate, vedere capitolo relativo. Per quanto riguarda la logica del sorgente, ecco una breve spiegazione: viene letto il file riga per riga e, sulla base delle condizioni che si incontrano man mano, vengono eseguite istruzioni diverse:
  • La linea è vuota : può capitare che si lascino linee di testo vuote per separare ulteriormente i campi o valori dell'interno dello stesso campo; in questo caso, poichè non c'è niente da leggere, semplicemente si passa oltre
  • La linea inizia per "[" : come già detto, in un file ini, i campi sono racchiusi tra parentesi quadre, perciò la linea costituisce il nome di un campo. Dopo aver eliminato le parentesi con opportune funzioni, si usa il risultato per aggiungere alla TreeView una root mediante Nodes.Add. Questo metodo accetta, tra i vari overloads, un parametro stringa che costituisce il testo del nodo
  • La linea inizia per ";" : è un commento e semplicemente viene omesso. Potreste comunque includerlo come nodo ausiliarlo e colorarlo con un colore differente
  • La linea non ha nessun delle caratteristiche indicate : è un valore. Quindi si aggiunge il suo contenuto come sotto-nodo all'ultimo nodo root aggiunto, con l'accortezza di controllare prima se ci sono dei commenti cosiddetti in-line e di eliminarli
Ecco uno screenshot di come si preseta il programma finito con un file ini caricato:

IniReaderComplete.jpg

Ed ecco uno screenshot di come potreste farlo diventare:

IniReaderColor.jpg


<< Precedente Prossimo >>
A proposito dell'autore

Programmatore e analista .NET 2005/2008/2010 (in particolare C# e VB.NET), anche nell'implementazione Mono per Linux. Conoscenze approfondite di Pascal, PHP, XML, HTML 4.01/5, CSS 2.1/3, Javascript (e jQuery). Conoscenze buone di C, LUA, GML, Ruby, XNA, AJAX e Assembly 68000. Competenze basilari di C++, SQL, Hlsl, Java.