METODI DI PARSING: esempio in VB.NET e C#
Il parsing, in informatica, è un processo con il quale un flusso di dati in input viene analizzato per determinarne la struttura con una specifica grammatica formale.
Il programma che esegue il parsing prende il nome di parser, esso ha il compito di determinare se e come un input può derivare dal simbolo iniziale.
Esistono due principali metodi di parsing:
Nello specifico, ci soffermiamo sulla lettura di un file .csv (comma-separeted values) e la sua trasposizione in una RichTextBox in VB.NET e C#, andando a trattare di seguito un esempio illustrativo in VB.NET.
Dopo aver creato il Form e averci inserito un Button (Button1) e una RichTextBox (RichTextBox1):
- Metodo top-down, che cerca di trasformare il simbolo iniziale nell'input attraverso ripetute segmentazioni;
- Metodo bottom-up, che invece cerca di riscrivere l'input sotto forma di simbolo iniziale.
Dopo aver creato il Form e averci inserito un Button (Button1) e una RichTextBox (RichTextBox1):
Import
System.IO
Public Class Form 1
Public Class Form 1
Vado a definire cosa controlla il Button1
Sub Button1_Click(Sender As Object, e As EventArgs) Handles Button1.Click
Acquisizione del nome del file
Dim o As New OpenFileDialog
o.ShowDialog()
Dim NomeFile As String = o.FileName
Acquisizione alternativa del nome del file
Dim
NomeFile As String = " percorso file "
Definizione del lettore: utilizzo la funzione StreamReader
Definizione del lettore: utilizzo la funzione StreamReader
Dim
s As New StreamReader(NomeFile)
Definisco un Loop fino alla lettura dell'ultima riga
Definisco un Loop fino alla lettura dell'ultima riga
Do
Dim RigaDelFile = s.ReadLine()
Dim RigaDelFile = s.ReadLine()
Non considero le righe di commento o le righe vuote
If
RigaDelFile.Contains("#") Then Continue DoIf
RigaDelFile.Contains(" ") Then Continue Do
Dim
Pezzi As String() = RigaDelFile.Split(" ".ToCharArray,
StringSplitOptions.RemoveEmptyEntries)
Trasferisco il tutto alla RichTextBox1
Me.RichTextBox1.AppendText(RigaDelFile
& Environment.NewLine)
Loop Untile s.EndOfStream
End Sub
End Class
Il parsing di un file di testo non presenta grandi differenze concettuali e operative tra VB.NET e C#.
La differenza principale, a parte quelle ovvie di sintassi, riguardano com'è strutturata la funzione principale per questa operazione, ovvero la funzione Streamreader.
In VB.NET la funzione Streamreader gestisce e legge il file di testo, comportando una semplificazione uno snellimento del codice.
Dim o As New OpenFileDialog
o.ShowDialog()
Dim NomeFile = o.FileName
Me.RichTextBox1.AppendText(NomeFile)
Dim s As StreamReader = New StreamReader(NomeFile)
In C#, invece, l'utilizzo della funzione è lo stesso, ma spesso viene utilizzata accompagnata dall'istruzione Using, che comporta una semplificazione del testo.
OpenFileDialog o = new OpenFileDialog();
o.ShowDialog();
dynamic NomeFile = o.FileName;
this.richTextBox1.AppendText(NomeFile);
StreamReader s = new StreamReader(NomeFile);
I metodi fondamentali di lettura di un file di testo sono due e li andremo ad analizzare per entrambi i linguaggi di programmazione:
VB.NET
C#
Public Overrides Function Read As Integer
VB.NET
C#
VB.NET
C#
VB.NET
buffer As Char(),
index As Integer,
count As Integer
) As Integer
public override int Read(
char[] buffer,
int index,
int count
)
VB.NET
index As Integer,
count As Integer
) As Integer
C#
Loop Untile s.EndOfStream
End Sub
End Class
Il parsing di un file di testo non presenta grandi differenze concettuali e operative tra VB.NET e C#.
La differenza principale, a parte quelle ovvie di sintassi, riguardano com'è strutturata la funzione principale per questa operazione, ovvero la funzione Streamreader.
In VB.NET la funzione Streamreader gestisce e legge il file di testo, comportando una semplificazione uno snellimento del codice.
Dim o As New OpenFileDialog
o.ShowDialog()
Dim NomeFile = o.FileName
Me.RichTextBox1.AppendText(NomeFile)
Dim s As StreamReader = New StreamReader(NomeFile)
In C#, invece, l'utilizzo della funzione è lo stesso, ma spesso viene utilizzata accompagnata dall'istruzione Using, che comporta una semplificazione del testo.
OpenFileDialog o = new OpenFileDialog();
o.ShowDialog();
dynamic NomeFile = o.FileName;
this.richTextBox1.AppendText(NomeFile);
StreamReader s = new StreamReader(NomeFile);
I metodi fondamentali di lettura di un file di testo sono due e li andremo ad analizzare per entrambi i linguaggi di programmazione:
- Metodo Read, legge il carattere successivo dal flusso di input e fa avanzare di un carattere la posizione del carattere.
VB.NET
Public
Overrides Function Read As Integer
C#
Public Overrides Function Read As Integer
- Metodo ReadToEnd, legge tutti i caratteri dalla posizione corrente fino alla fine del flusso: è previsto anche il metodo asincrono ReadToEndAsync().
VB.NET
Public
Overrides Function ReadToEnd As String
C#
public
override string ReadToEnd()
- Metodo ReadLine, legge una riga di caratteri dal flusso corrente e restituisce i dati come stringa; è previsto anche il metodo asincrono ReadLineAsync().
VB.NET
Public
Overrides Function ReadLine As String
C#
Public
Overrides Function ReadLine As String
- Metodo Read(Char[], Int32, Int32), legge un numero massimo di caratteri dal flusso corrente e scrive i dati in un buffer, a partire dall'indice specificato; è previsto anche un metodo asincrono di lettura ReadAsync(Char[], Int32, Int32).
VB.NET
Public
Overrides Function Read (
buffer As Char(),
index As Integer,
count As Integer
) As Integer
C#
public override int Read(
char[] buffer,
int index,
int count
)
- Metodo ReadBlock(Char[], Int32, Int32), legge un numero massimo specificato di caratteri dal flusso corrente e scrive i dati in un buffer, a partire dall'indice specificato; è previsto anche un metodo asincrono di lettura ReadBlockAsyn(Char[], Int32, Int32).
VB.NET
Public
Overrides Function ReadBlock (
buffer As Char(),
index As Integer,
count As Integer
) As Integer
C#
public
override int ReadBlock(
char[] buffer,
int index,
int count
)
Commenti
Posta un commento