Kirjautuminen

Haku

Tehtävät

Koodit: VB.NET: Komennon lainausmerkkien jäsentäminen

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

Kirjoita kommentti

Muista lukea kirjoitusohjeet.
Tietoa sivustosta