Kirjoittaja: Hennkka
Kirjoitettu: 01.01.2011 – 01.01.2011
Tagit: teksti, koodi näytille, vinkki
Funktio jäsentää komentoriville annetun komennon lainausmerkit ja hipsut huomioiden ja palauttaa komennon parametrit taulukoituna. Sisältää pienen syntaksin tarkistuksen.
Koodin pitäisi olla hyvin kommentoitua.
Sisältää esimerkin (sub Main()).
Module Module1
Sub Main()
'Loopataan, jottei ohjelma lopu
Do
'Tulostetaan ohjeet, jäsennetään luettu rivi ja tulostetaan parametrit omille rivelilleen
Console.Write("Anna komento jäsennettäväksi: ")
Dim Jäsennetty() As String = Jäsennä(Console.ReadLine)
Dim i As Integer = 1 'Parametrin numero
For Each Osa As String In Jäsennetty
Console.WriteLine(i.ToString() + ". parametri: " + Osa)
i += 1
Next
Loop
End Sub
''' <summary>
''' Jäsentää annetun komentorivin rivin
''' </summary>
''' <param name="Rivi">Rivi jäsennettäväksi</param>
''' <param name="Virheet">(Vapaaehtoinen) Tulostetaanko virheet komentoriviin</param>
''' <returns>Rivi jäsennettynä taulukkoon</returns>
''' <remarks></remarks>
Private Function Jäsennä(ByVal Rivi As String, Optional ByVal Virheet As Boolean = False) As String()
If Rivi.Trim() = "" Then 'Tyhjän jäsennyksen tulos on tyhjä taulukko
Dim Tyhjä(-1) As String
Return Tyhjä
End If
Dim Tulos As New List(Of String) 'Lista, koska siihen on helpompi lisätä alkioita kuin taulukkoon
Dim tmp As String = "" 'Väliaikaismuisti
Dim Lainaus As Boolean = False
Dim Lainattu As Boolean = False 'Tyhjiä parametrejä varten
Dim Hipsut As Boolean = False
For Each Merkki As Char In Rivi 'Käydään läpi rivi merkki kerrallaan
If Merkki = """"c And Not Hipsut Then 'Lainausmerkki hipsujen ulkopuolella
Lainaus = Not Lainaus
Lainattu = True 'Parametria on lainattu
Continue For
End If
If Merkki = "'"c And Not Lainaus Then 'Hipsu lainausmerkkien ulkopuolella
Hipsut = Not Hipsut
Lainattu = True 'Parametria on lainattu
Continue For
End If
If Lainaus Or Hipsut Then 'Jos on lainaus menossa
tmp += Merkki 'Lisätään merkki ilman muita tarkistuksia
Continue For
End If
If Merkki = " "c Then 'Jos merkki on väli ( )
'Ei lisätä tyhjää tmp:tä, ellei ole ollut lainausmerkeissä
If tmp <> "" Or Lainattu Then Tulos.Add(tmp)
tmp = "" 'Alustetaan muuttujat
Lainattu = False
Continue For
End If
tmp += Merkki 'Jos päästään näin pitkälle, lisätään merkki tmp:hen
Next
'Syntaksin tarkistus (onko lainaus ja hipsut lopetettu)
If Virheet And (Lainaus Or Hipsut) Then Console.Error.WriteLine("Virhe: Lainausta ei ole lopetettu oikein")
'Lisätään viimeinenkin parametri tulokseen
If tmp <> "" Or Lainattu Then Tulos.Add(tmp)
Return Tulos.ToArray() 'Palautetaan tulos taulukkona
End Function
End Module