2009-03-18 27 views
8

¿Hay algún método disponible en VBA para leer y escribir archivos INI? Sé que podría usar;Forma recomendada para leer y escribir archivos .ini en VBA

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

... y analizar los datos. En cambio, estoy tratando de ver qué herramientas ya están disponibles.

Sé que en C# que puede hacer ...

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

¿Hay un equivalente de VBA?

Estoy intentando esto en MS Access 2003 VBA.

Respuesta

7

Aquí hay algunos fragmentos de código que usamos, deberían ayudarlo a obtener la idea. Estas rutinas usan las llamadas API. Se incluyen dos funciones para leer/escribir una configuración de cadena en una sección específica en el archivo 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) es el método por lo general se recomienda para archivos de texto de lectura y escritura en VBA

+0

¿Realmente? ¿Por qué usarías una biblioteca externa (supongo que la vinculación tardía, por supuesto) para algo que VBA proporciona de forma nativa? ¿Cuáles son las ventajas? –

+0

Hace que el código sea más fácil de leer, en mi opinión. Y puede usar For ... Each para repetir las carpetas fácilmente. – HardCode

+0

Probablemente sea una buena idea no leerlos ni escribirlos directamente. El enfoque API es mucho mejor porque abstrae la necesidad de comprender el formato del archivo INI. No tiene sentido escribir código para comprender los archivos INI cuando ya existe. – JohnFx

1

Karl Peterson's kpini tiene casi todo lo que es probable que necesite:. Declaraciones API, una clase Cinifile, cosas por el estilo eso. Empezaría con eso y lo cambiaría a gusto, lo que no debería llevar mucho.

Cuestiones relacionadas