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 SubDataTesti.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 SubKiva :)
Ihan kiva
aika nätti
Aihe on jo aika vanha, joten et voi enää vastata siihen.