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