2009-03-18 30 views
8

Esistono metodi disponibili in VBA per leggere e scrivere file INI? So che potrei usare;Modo consigliato di leggere e scrivere file .ini in VBA

Open "C:\test.ini" For Input As #1 

... e analizzare i dati. Invece sto cercando di vedere quali strumenti sono già disponibili.

So in C# si può fare ...

using INI; 
INIFile ini = new INIFile("C:\test.ini"); 

Esiste un equivalente per VBA?

Sto tentando questo in MS Access 2003 VBA.

risposta

7

Ecco alcuni frammenti di codice che utilizziamo, dovrebbe aiutarti a ottenere l'idea.Queste routine utilizzano le chiamate API. Sono incluse due funzioni per leggere/scrivere un'impostazione di stringa in una sezione specifica nel file ini.

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

Public Function IniFileName() As String 
    IniFileName = "c:\[yourpath here]\settings.ini" 
End Function 


Private Function ReadIniFileString(ByVal Sect As String, ByVal Keyname As String) As String 
Dim Worked As Long 
Dim RetStr As String * 128 
Dim StrSize As Long 

    iNoOfCharInIni = 0 
    sIniString = "" 
    If Sect = "" Or Keyname = "" Then 
    MsgBox "Section Or Key To Read Not Specified !!!", vbExclamation, "INI" 
    Else 
    sProfileString = "" 
    RetStr = Space(128) 
    StrSize = Len(RetStr) 
    Worked = GetPrivateProfileString(Sect, Keyname, "", RetStr, StrSize, IniFileName) 
    If Worked Then 
     iNoOfCharInIni = Worked 
     sIniString = Left$(RetStr, Worked) 
    End If 
    End If 
    ReadIniFileString = sIniString 
End Function 

Private Function WriteIniFileString(ByVal Sect As String, ByVal Keyname As String, ByVal Wstr As String) As String 
Dim Worked As Long 

    iNoOfCharInIni = 0 
    sIniString = "" 
    If Sect = "" Or Keyname = "" Then 
    MsgBox "Section Or Key To Write Not Specified !!!", vbExclamation, "INI" 
    Else 
    Worked = WritePrivateProfileString(Sect, Keyname, Wstr, IniFileName) 
    If Worked Then 
     iNoOfCharInIni = Worked 
     sIniString = Wstr 
    End If 
    WriteIniFileString = sIniString 
    End If 
End Function 
1

FileSystemObject object con un [TextStream] (http://msdn.microsoft.com/en-us/library/314cz14s(VS.85).aspx) è il metodo generalmente consigliato per la lettura e la scrittura di file di testo in VBA

+0

Davvero? Perché dovresti utilizzare una libreria esterna (presumo che l'associazione tardiva, ovviamente) per qualcosa che VBA fornisce in modo nativo? Quali sono i vantaggi? –

+0

A mio parere, facilita la lettura del codice. E puoi usare For ... Each per scorrere facilmente le cartelle. – HardCode

+0

Probabilmente è una buona idea non leggere e scriverli direttamente. L'approccio dell'API è molto migliore perché astrae la necessità di comprendere la formattazione del file INI. Non ha senso scrivere codice per capire i file INI quando già esiste. – JohnFx

1

Karl Peterson's kpini ha quasi tutto ciò è molto probabile che bisogno di:. Dichiarazioni API, una classe Cinifile, cose del genere Iniziamo da questo e lo trasformo in gusto, che non dovrebbe richiedere molto tempo

Problemi correlati