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:
  • 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.

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):

Import System.IO 

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
Dim s As New StreamReader(NomeFile)


Definisco un Loop fino alla lettura dell'ultima riga
Do
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:
  • Metodo Read, legge il carattere successivo dal flusso di input e fa avanzare di un carattere la posizione del carattere.
SINTASSI:

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().
SINTASSI:

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().
SINTASSI:

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).
SINTASSI:

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).
SINTASSI:
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

Post popolari in questo blog

CAPM: Capital Asset Pricing Model

EREDITARIETÀ INFORMATICA