Kirjautuminen

Haku

Tehtävät

Opasarkisto: Visual Basic -opas: Osa 8 - Tiedostot

  1. Osa 1 - Johdanto
  2. Osa 2 - Käyttöliittymä
  3. Osa 3 - Muuttujat ja taulukot
  4. Osa 4 - Ehdot ja silmukat
  5. Osa 5 - Aliohjelmat ja funktiot
  6. Osa 6 - Hiiri ja näppäimistö
  7. Osa 7 - VB:n grafiikkakomennot
  8. Osa 8 - Tiedostot
  9. Osa 9 - WinAPIn käyttö

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ää.

Rivitiedostot

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äistiedostot

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.

Loppusanat

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.


Kommentit

Silakka [23.01.2004 20:52:57]

#

hyväää tietoa...

Asko Telinen [18.05.2004 10:16:54]

#

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.

JAK [23.05.2004 00:01:15]

#

Oli Antti selventävästi selitetty. Tämmöinen aloittelijakin ihan ymmärsi! :)

pipopää [30.05.2004 09:07:30]

#

saisko mitenkää silee että ohjelma kreattaisi kansion ja .txt filun

hunajavohveli [04.09.2004 14:20:28]

#

MkDir "kansio"
Open "kansio\tiedosto.txt" For OutPut As FreeFile ':Close

tumik [28.12.2006 17:32:52]

#

Ja mitenköhän saisi ennen lukua tarkistettua kuinka monta riviä tiedostossa on?

hunajavohveli [24.02.2007 11:29:38]

#

Siihen ei ole muuta keinoa kuin lukea tiedosto alustavasti läpi ja laskea rivinvaihtojen määrä.

black cat [15.12.2009 13:34:54]

#

Täähän autto iha hirveesti

Kirjoita kommentti

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.

Muista lukea kirjoitusohjeet.
Tietoa sivustosta