Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: VB6: Korvaaja QB:n Data-komennolle

Antti Laaksonen [25.08.2007 13:00:52]

#

Visual Basicissa taulukoiden alustus omilla lähtötiedoilla on aika vaikeaa, koska kielestä puuttuu QBasicista tuttu mahdollisuus kirjoittaa tietoja Data-riveille ja lukea niitä myöhemmin Read-lauseilla. Tällaisen järjestelmän pystyy kuitenkin tekemään melko helposti itse, niin kuin alla olevasta esimerkistä selviää.

Ajatuksena on, että Data-riveille voi kirjoittaa pilkuilla erotettuna kaikenlaista tietoa. Kun tietoa sitten tarvitaan ohjelmassa, sitä voi lukea samassa järjestyksessä Read-lauseilla. Usein taulukko alustetaan tällä tavalla For-silmukassa, jolloin silmukan joka kierroksella haetaan yksi tai useampi Data-riveille laitettu tieto.

Yhdellä Data-rivillä voi olla monta tietoa ja yhdessä Read-lauseessa voi olla monta muuttujaa, minkä vuoksi molemmat aliohjelmat määritellään niin, että niillä on ParamArray-tyyppinen parametri. Tällöin aliohjelmalle voidaan antaa vaihteleva määrä parametreja. Luetut tiedot tallennetaan taulukkoon, ja aina kun taulukon tila loppuu kesken, se kasvatetaan kaksinkertaiseksi.

Data.bas

Option Explicit

Private DTiedot() As Variant    ' tiedot taulukossa
Private DMaara As Long          ' tietojen määrä
Private DRaja As Long           ' taulukon koko
Private DKohta As Long          ' taulukon lukukohta

Public Sub Data(ParamArray tiedot() As Variant)
    ' taulukon alustus
    If DMaara = 0 Then
        ReDim DTiedot(16)
        DRaja = 16
    End If
    Dim i As Long
    For i = LBound(tiedot) To UBound(tiedot)
        ' taulukon laajennus tarvittaessa
        If DMaara > DRaja Then
            DRaja = DRaja * 2
            ReDim Preserve DTiedot(DRaja)
        End If
        ' tiedon lisäys taulukkoon
        DTiedot(DMaara) = tiedot(i)
        DMaara = DMaara + 1
    Next
End Sub

Public Sub Read(ParamArray muuttujat() As Variant)
    Dim i As Long
    For i = LBound(muuttujat) To UBound(muuttujat)
        ' QBasic-yhteensopiva virheilmoitus
        If DKohta = DMaara Then
            Err.Raise 4, , "Out of Data"
            Exit Sub
        End If
        ' tiedon haku muuttujaan
        muuttujat(i) = DTiedot(DKohta)
        DKohta = DKohta + 1
    Next
End Sub

DataTesti.frm

Option Explicit

Private Sub Form_Load()
    Data "tammi", "helmi", "maalis", "huhti"
    Data "touko", "kesä", "heinä", "elo"
    Data "syys", "loka", "marras", "joulu"

    Dim kuukaudet(1 To 12) As String
    Dim i As Integer

    For i = 1 To 12
        Read kuukaudet(i)
    Next

    MsgBox "Nyt on " & kuukaudet(Month(Now)) & "kuu"
End Sub

moptim [25.08.2007 15:26:36]

#

Kiva :)

Mega-Ohjelmoija [26.08.2007 15:37:44]

#

Ihan kiva

Jorgga [27.08.2007 14:33:05]

#

aika nätti

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta