Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: VB6: Ini tiedostot

odys [18.07.2003 19:38:48]

#

Onko Visual Basicissä jotain käteviä ini funktioita?

Antti Laaksonen [18.07.2003 22:33:19]

#

VB:n kautta INI-tiedostojen käsittely ei onnistu suoraan (ellei kirjoita omia aliohjelmia, mikä ei sekään ole kovin vaikeaa), mutta WinApi sisältää pari hyödyllistä funktiota: WritePrivateProfileString ja GetPrivateProfileString. Oikeastaan INI-tiedostot kuuluvat 16-bittiseen Windowsiin - nykyään täytyisi käyttää rekisteriä ohjelman tietojen säilyttämiseen - mutta uusistakin Windowseista nuo funktiot löytyvät yhteensopivuuden vuoksi.

Funktioiden määrittelyt pitää laittaa ohjelman alkuun. Ne ovat:

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Tässä ensin INI-tiedostoon kirjoittaminen, mikä tapahtuu WritePrivateProfileString-funktion avulla. Funktion parametrit ovat lohkon nimi, avaimen nimi, tallennettava arvo ja INI-tiedoston nimi.

Dim x As Long
x = WritePrivateProfileString("Testi", "Avain1", "Apina", "c:\o\testi.ini")
x = WritePrivateProfileString("Testi", "Avain2", "Banaani", "c:\o\testi.ini")
x = WritePrivateProfileString("Testi", "Avain3", "Cembalo", "c:\o\testi.ini")

Edellisen esimerkin tuottama INI-tiedosto näyttäisi tältä:

[Testi]
Avain1=Apina
Avain2=Banaani
Avain3=Cembalo

INI-tiedoston lukeminen taas tapahtuu GetPrivateProfileString-funktion avulla. Funktion parametrit ovat lohkon nimi, avaimen nimi, oletusarvo jos lohkoa tai avainta ei löydy, merkkijonomuuttuja johon arvo palautuu, muuttujan pituus ja INI-tiedoston nimi.

Dim x As Long, arvo As String
arvo = String(255, " ")
x = GetPrivateProfileString("Testi", "Avain1", "", arvo, 255, "c:\o\testi.ini")
MsgBox arvo
x = GetPrivateProfileString("Testi", "Avain2", "", arvo, 255, "c:\o\testi.ini")
MsgBox arvo
x = GetPrivateProfileString("Testi", "Avain3", "", arvo, 255, "c:\o\testi.ini")
MsgBox arvo

INI-tiedostoja käsitellessä ei tarvitse huolehtia lohkojen ja avainten olemassaolosta, sillä ne luodaan tarvittaessa. Jos avaimen arvoksi asetetaan tyhjä merkkijono, se poistetaan. Jos kirjoitat koodin 16-bittisellä Windowsilla, vaihda funktioiden palautusarvoksi Integer.

odys [19.07.2003 00:49:35]

#

INI-tiedostojen käsitteleminen on minulle tuttua puuhaa eri kielillä kuitenkin ja nämä funktiot ovat mahtavia :)

Kiitos. Tämä sopii tarkoitukseenikin hyvin.. kun on kuitenkin paljon asetuksia ja ne voi sitten helposti muuttaa manuaalisestikkin tiedostoa editoimalla eikä tarvitse sukeltaa rekistereihin.

Olen joskus tehnyt oman INI tiedostoja matkivan systeemin PHP:llä. Annan esimerkin eroista.. (Jos et tunne INI-tiedostojen toimintaa et varmaankaan tiedä miten omatekemäni systeemi eroaa normaaleista INI-tiedostoista.)

Tähän = "Voi laittaa muuttujia, jotka eivät ole minkään lohkon alla. Ja tulevat Parseroinnin palauttamaan arrayhyn vain omina avaiminaan."
[

   lohko1

    ]
Avain 2 = "Kuten huomaatte on lohkojen kirjoittaminen todella joustavaa niinkuin tietysti avaimienkin, koska ne
voi laittaa tällä tavalla monirivisiksikin" /* Tottakai moniriviset
kommentitkin ovat tuettu */
# Muita
// kommentteja
; ovat nämä 3 (yhden rivin kommentteja)
Myös

    =


   "Tämä on hyvin mahdollista"
/* Joustavaa eikös? :) */

Vastaus

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

Tietoa sivustosta