Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Tekstitiedoston satunnainen rivi (VB)

VB.Koodari [19.07.2005 22:25:16]

#

Nyt on tullut "seinä" vastaan ja pitäisi saada tekstitiedostosta satunnainen rivi.

Open App.Path & "\teksti.txt" For Input As #1
        Input #1, k
Close #1

Tällä tavalla saan aina ensimmäisen rivin, mutta tarkoitus olisi siis saada satunnainen rivi.

Kiitokset vastauksista.

Antti Laaksonen [19.07.2005 22:38:30]

#

Ensin sinun pitää tietää, kuinka monta riviä tiedostossa on kaikkiaan. Jos rivimäärä on valmiiksi tiedossa, voit vain arpoa jonkin riveistä ja lukea rivejä siihen riviin asti. Jos rivimäärä ei ole tiedossa, tiedosto täytyy ensin lukea kokonaan läpi rivien määrän laskemiseksi. Sen jälkeen voit toimia, kuten helpommassa tapauksessa. Toinen tapa on panna rivit muistiin (taulukkoon) jo ensimmäisellä lukukerralla, jolloin tiedostoa ei tarvitse lukea kahteen kertaan.

VB.Koodari [19.07.2005 23:49:20]

#

No niin. Sain sentään jotain aikaa ja melkein toimivaakin :)

Dim Taulukko() As String
Dim rivit As Long
Dim k As String

       Open App.Path & "\teksti.txt" For Input As #1
           Do Until EOF(1)
               DoEvents
               rivit = rivit + 1
               Line Input #1, k
               ReDim Taulukko(rivit) As String
               Taulukko(rivit) = k
           Loop
       Close #1

Mistä johtuu, että kutsuessani jotainkin taulukon alkiota esim. Taulukko(4), alkio on tyhjä, vaikka tiedostossa on ainakin 53 riviä?

Antti Laaksonen [19.07.2005 23:56:17]

#

ReDim-komento jyrää alleen taulukon alkuperäisen sisällön, mutta jos käytät Preserve-avainsanaa, näin ei tapahdu.

ReDim Preserve Taulukko(rivit) As String

Minusta kyllä taulukon kasvattaminen rivi riviltä tuntuu vähän vaivalloiselta. Voisit määritellä taulukon heti alkuun vähän suuremmaksi ja kasvattaa sen kokoa myös suuremmissa erissä. Tosin kyllähän ohjelma noinkin toimii. :)

VB.Koodari [20.07.2005 00:02:27]

#

Aah toimii. Oli tällä kertaa yhdestä sanasta kiinni :)

Kiitos avusta.

Vastaus

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

Tietoa sivustosta