Kirjoittaja: Antti Laaksonen
⚠ Huomio! Tämä opas on vanhentunut. Oppaan sisältöön ei voi enää luottaa. Opas on säilytetty vain sen historiallisen arvon vuoksi. ⚠
Tässä osassa perehdytään tiedostojen käsittelyyn VB:n tiedostofunktioilla.
Tiedostoja on olemassa kahta tyyppiä, rivi- ja peräkkäistiedostoja. Rivitiedostoissa tieto on rivinvaihtomerkillä (Asc13+Asc10) erotettuna. Peräkkäistiedostossa tieto on peräkkäin, sitä ei ole erotettu millään merkeillä ja ilman tiedostoformaatin tuntemusta siitä on vaikea saada selvää.
Rivitiedostojen lukeminen tapahtuu seuraavasti:
Dim i As Integer, r As String Open "c:\hakemisto\tiedosto.txt" For Input As #1 For i = 1 to 5 Input #1, r Msgbox r Next Close #1
Esimerkki lukee tiedoston viisi ensimmäistä riviä ja näyttää ne yksitelleen viesti-ikkunassa.
Open avaa tiedoston ja Close sulkee sen. #1 on tiedostonumero, jolla aukiolevaan tiedostoon viitataan. Input-komento lukee tiedostosta seuraavan rivin muuttujaan. Open-lauseessa Input tarkoittaa sitä, että tiedosto avataan rivitiedostona lukemista varten.
Rivitiedostoja kirjoitetaan vuorostaan seuraavasti:
Dim i As Integer Open "c:\hakemisto\tiedosto.txt" For Output As #1 For i = 1 to 5 Print #1, "Rivi " & i Next Close #1
Esimerkki kirjoittaa tiedostoon viisi riviä, joissa lukee "Rivi [rivinumero]".
Nyt Inputin tilalla on Output, joka avaa tiedoston kirjoitusta varten. Kirjoitusfunktio on Print. Kun tiedosto avataan kirjoittamista varten, kaikki siinä ollut tieto katoaa.
Kolmas rivitiedostonkäsittelytapa on rivien lisääminen tiedoston loppuun, joka tapahtuu seuraavasti:
Dim i As Integer Open "c:\hakemisto\tiedosto.txt" For Append As #1 For i = 5 to 1 Step -1 Print #1, i & ". viimeinen rivi" Next Close #1
Tiedostonkäsittely on muuten identtistä edellisen esimerkkikoodin kanssa, paitsi että Output on korvattu sanalla Append. Nyt tiedoston loppuun ilmestyy viisi riviä, eivätkä valmiiksi olevat rivit katoa.
Peräkkäistiedostoista on eniten hyötyä silloin, kun haluaa tehdä ohjelmalle oman tallennusformaatin tai jos haluaa tallentaa tietueessa olevaa tietoa.
Seuraavassa on näyte peräkkäistiedostojen käytöstä tietueen kanssa:
Type HTiedot nimi As String ika As Integer palkka As Currency End Type 'aliohjelmaan: Dim tiedot As HTiedot tiedot.nimi = "Jussi Virtanen" tiedot.ika = 25 tiedot.palkka = 2500 Open "c:\hakemisto\tiedosto.dat" For Binary As #1 Put #1, ,tiedot Close #1
Nyt tiedostossa tiedosto.dat on kaikki tietueen muuttujat - yhdellä tallennuskäskyllä. Tiedot voisi ladata takaisin tietueeseen seuraavasti:
Type HTiedot nimi As String ika As Integer palkka As Currency End Type 'aliohjelmaan: Dim tiedot As HTiedot Open "c:\hakemisto\tiedosto.dat" For Binary As #1 Get #1, ,tiedot Close #1 Msgbox tiedot.nimi Msgbox tiedot.ika Msgbox tiedot.palkka
Peräkkäistiedostoissa avaustapa on siis Binary. Tiedostoa pystyy sekä lukemaan että kirjoittamaan samalla avauskerralla - komennoilla Get ja Put. Tietoa kirjoitetaan/luetaan järjestyksessä, jos toisen parametrin jättää pois, muuten sitä voidaan lukea mistä kohtaa tiedostoa tahansa.
Kyllä vain - tästä osasta tuli vähän lyhyempi kuin edeltäjänsä. Mutta mielestäni tiedostofunktiot tulivat silti käsitellyiksi aivan hyvin, itse en paljon kummoisempia tiedostonkäsittelytapoja koskaan ole tarvinnut.
Visual Basic -opassarja alkaa olla loppupuolella, sillä tällä tietoa jatko-osia on tulossa ainoastaan yksi. Tämä sarjan päättävä osa käsittelee WinApi-komentojen käyttämistä VB:stä käsin, mikä laajentaa VB:n mahdollisuuksia huomattavasti.
hyväää tietoa...
Open "c:\hakemisto\tiedosto.txt" For Input As #1
Tässä osiossa olisi kyllä voinut mainita esim. "FreeFile" funktion, joka palauttaa aina vapaan tiedostonumeron. Mitä sitten jos ohjelma on jo avannut jossain muualla jonkun tiedoston, jolloin 1 on käytössä ?
"Open" lause voi saada muitakin parametrejä kuin tämä Input/Output.
Rivin voi lukea myös "Line Input" komennolla.
Oli Antti selventävästi selitetty. Tämmöinen aloittelijakin ihan ymmärsi! :)
saisko mitenkää silee että ohjelma kreattaisi kansion ja .txt filun
MkDir "kansio" Open "kansio\tiedosto.txt" For OutPut As FreeFile ':Close
Ja mitenköhän saisi ennen lukua tarkistettua kuinka monta riviä tiedostossa on?
Siihen ei ole muuta keinoa kuin lukea tiedosto alustavasti läpi ja laskea rivinvaihtojen määrä.
Täähän autto iha hirveesti
Huomio! Kommentoi tässä ainoastaan tämän oppaan hyviä ja huonoja puolia. Älä kirjoita muita kysymyksiä tähän. Jos koodisi ei toimi tai tarvitset muuten vain apua ohjelmoinnissa, lähetä viesti keskusteluun.