Onko Visual Basicissä jotain käteviä ini funktioita?
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.
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? :) */
Aihe on jo aika vanha, joten et voi enää vastata siihen.