A volte capita di dover fare dei programmi che necessitano di leggere molte informazioni in input. I metodi per procedere in questo caso sono due:
La prima ipotesi verrà approfondita in un'altra pagina, la seconda è molto più vasta. Possiamo usare qualsiasi tipo di file, ma uno standard gestito dalle API di Windows è quello del file .ini, suddiviso in sezioni.
Un file .ini non è altro che un file di testo conforme ad una determinta sintassi. E' suddiviso in blocchi evidenziati dalle parentesi quadre e in questi blocchi contiene per ogni riga il nome della variabile ed il suo valore, quello chesegue ne è un esmpio classico.
[blocco1] variabile1 = valore1 variabile2 = valore2 [blocco2] variabile3 = valore3
La classe il cui codice è elencato di seguito sfrutta le funzioni del Kernel di Windows WritePrivateProfileString e GetPrivateProfileString.
L'unica limitazione di questa classe è la lunghezza della stringa che può essere inserita in un parametro. Attualmente la lunghezza massima è 1000 (penso che possa bastare), potete modificarla direttamente nel codice.
Nel progetto VB basta inserire una nuova classe (.cls) e fare il copia ed incolla del sorgente che segue per poi chiamarlo cIni.cls. E' evidente che questo è il nome che utilizzo io personalmente ma nulla vienta di scegliere un nome più simpatico. Nel codice c'è anche un esempio di gestione degli errori personalizzati tramite il comando err.raise,
Option Explicit 'Dichiarazioni delle funzioni di sistema delle libreria Kernel32 'Serve per scrivere un parametro nel file Ini 'Prende come parametri la sezione del file .ini, il nome del parametro, 'il suo valore ed il nome del file .ini Private Declare Function WritePrivateProfileString _ Lib "kernel32" Alias "WritePrivateProfileStringA" _ (ByVal lpApplicationKey As String, _ ByVal lpKeyName As Any, _ ByVal lsString As Any, _ ByVal lplFilename As String) As Long 'Serve per leggere un parametro del file .ini 'Prende come parmetri la sezione del file .ini 'il nome della chiave, il suo valore di default nel caso in cui non ci sia 'la stringa restituita, la sua lunghezza ed il nome del file .ini Private Declare Function GetPrivateProfileString _ Lib "kernel32" Alias "GetPrivateProfileStringA" _ (ByVal lpApplicationKey As String, _ ByVal lpKeyName As String, _ ByVal lpDefault As String, _ ByVal lpReturnedString As String, _ ByVal nSize As Long, _ ByVal lpFileName As String) As Long 'variabile per il nome del file Private m_strFile As String 'variabile per il nome della sezione Private m_AppKey As String 'Inizializzazione della classe Private Sub Class_Initialize() m_strFile = "" m_AppKey = "" End Sub 'Funzioni di get e set del nome del file Public Property Get FileName() As String FileName = m_strFile End Property Public Property Let FileName(ByVal strFile As String) m_strFile = Trim(strFile) End Property 'Funzioni di get e set della sezione Public Property Get ApplicationKey() As String ApplicationKey = m_AppKey End Property Public Property Let ApplicationKey(ByVal strAppKey As String) m_AppKey = Trim(strAppKey) End Property 'Conversione della stringa restituita. 'Elimina tutti i caratteri superflui Private Function Asc2String(str As String) As String Dim i As Integer Dim strOP As String Dim intAsc As Integer str = Trim(str) strOP = "" For i = 1 To Len(str) intAsc = Asc(Mid(str, i, 1)) If intAsc > 31 Then strOP = strOP & Chr(intAsc) Next Asc2String = strOP End Function 'Restituisce il valore delle chiave 'In caso di errore genera un errore che può essere intercettato 'dal modulo chiamante Public Function GetValue(ByVal keyName As String, ByVal strDefault As String) As String Dim strVal As String * 1000 Dim ret As Long ret = GetPrivateProfileString(m_AppKey, keyName, strDefault, strVal, Len(strVal), m_strFile) If ret <> 0 Then GetValue = Asc2String(strVal) Else Err.Raise 1025, "Ini Manager Class", "Errore nella lettura della chiave " & keyName End If End Function 'Imposta il valore di una chiave 'Restituisce True se va a buon file Public Function SetValue(ByVal keyName As String, ByVal strValue As String) As Boolean Dim ret As Long ret = WritePrivateProfileString(m_AppKey, keyName, strValue, m_strFile) If ret = 0 Then SetValue = False Exit Function End If SetValue = True End Function
Per quanto riguarda la gestione invece basta inserire il file .ini nella stessa directory dell'applicazione,
Dim iniFile As New Cini
dim strVar1 as String
iniFile.FileName = App.Path & "/miaApplicazione.ini"
'Supponiamo di avere una sezione chiamata sezioneq ed una variabile di nome Pippo
'ovvero un file ini del genere
'[Sezione1]
'Pippo=Ciao
iniFile.ApplicationKey = "Sezione1"
strVar1 = iniFile.GetValue("Pippo", "mio valore di default in assenza della variabile")
'oppure possiamo scrivere nel file .ini tramite il comando
iniFile.SetValue "Pippo", "Arrivederci"
'Se vogliamo possiamo anche controllare che tutto sia andato bene testando una veriabile booleana
if iniFile.SetValue "Pippo", "Arrivederci" then
MsgBox("Ok")
else
MsgBox("Errore")
end if
Torna alla home page