Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/12/2011, 10:24
JonathanB
Usuario no validado
 
Fecha de Ingreso: junio-2010
Ubicación: Guatemala
Mensajes: 196
Antigüedad: 14 años, 5 meses
Puntos: 25
Mensaje Respuesta: Leer archivo .ini

Saludos, puedes probar una clase que usaba hace bastante tiempo para leer archivos INI.

A tu proyeco agregale la referencia a Microsoft Scripting Runtime (Menú Proyecto>Referencias>Selecciona Microsoft Scripting Runtime).


Crea un modulo "Declaraciones"y añade el siguente código
Código vb:
Ver original
  1. Option Explicit
  2.  
  3. ' API que recupera información de un archivo INI
  4. ' ==============================================
  5. Public Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
  6.     ByVal lpApplicationName As String, _
  7.     ByVal lpKeyName As String, _
  8.     ByVal lpDefault As String, _
  9.     ByVal lpReturnedString As String, _
  10.     ByVal nSize As Long, _
  11.     ByVal lpFileName As String) As Long
  12.  
  13. ' API que guarda información a un archivo INI
  14. ' ===========================================
  15. Public Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
  16.     ByVal lpApplicationName As String, _
  17.     ByVal lpKeyName As Any, _
  18.     ByVal lpString As Any, _
  19.     ByVal lpFileName As String) As Long

Crea una nueva clase "ArchivoIni" y añade el siguiente código.
Código vb:
Ver original
  1. ' =========================================================
  2. ' Jonathan Búcaro
  3. ' =========================================================
  4. ' Clase para el manejo de configuraciones por medio de
  5. ' archivos INI.
  6. ' =========================================================
  7. ' 25/09/2009 - Creación
  8. ' =========================================================
  9.  
  10. Option Explicit
  11.  
  12. Private m_Ruta As String
  13. Private m_Nombre As String
  14. Private m_Seccion As String
  15. Private m_Llave As String
  16. Private m_Valor As String
  17.  
  18. ' Clase ArchivoINI
  19. ' =================
  20. Private Sub Class_Initialize()
  21.     m_Ruta = App.Path
  22.     m_Nombre = ""
  23.     m_Seccion = ""
  24.     m_Llave = ""
  25.     m_Valor = ""
  26. End Sub
  27.  
  28. ' Ruta donde se encuentra el Archivo INI
  29. ' ======================================
  30. Public Property Get Ruta() As String
  31.     Ruta = m_Ruta
  32. End Property
  33.  
  34. Public Property Let Ruta(ByVal strValue As String)
  35.     If Not Len(Trim(strValue)) = 0 Then
  36.         m_Ruta = strValue
  37.     End If
  38. End Property
  39.  
  40. ' Nombre del archivo INI
  41. ' ======================
  42. Public Property Get Nombre() As String
  43.     Nombre = m_Nombre
  44. End Property
  45.  
  46. Public Property Let Nombre(ByVal strValue As String)
  47.     If Not Len(Trim(strValue)) = 0 Then
  48.         m_Nombre = strValue
  49.     End If
  50. End Property
  51.  
  52. ' Sección del Archivo INI donde se encuentra la información
  53. ' =========================================================
  54. Public Property Get Seccion() As String
  55.     Seccion = m_Seccion
  56. End Property
  57.  
  58. Public Property Let Seccion(ByVal strValue As String)
  59.     If Not Len(Trim(strValue)) = 0 Then
  60.         m_Seccion = strValue
  61.     End If
  62. End Property
  63.  
  64. ' Sección del Archivo INI donde se encuentra la información
  65. ' =========================================================
  66. Public Property Get Llave() As String
  67.     Llave = m_Llave
  68. End Property
  69.  
  70. Public Property Let Llave(ByVal strValue As String)
  71.     If Not Len(Trim(strValue)) = 0 Then
  72.         m_Llave = strValue
  73.     End If
  74. End Property
  75.  
  76. ' Valor de la Llave que se encuentra dentro de una Sección en un Archivo INI
  77. ' ==========================================================================
  78. Public Property Get Valor() As String
  79.     Valor = m_Valor
  80. End Property
  81.  
  82. Public Property Let Valor(ByVal strValue As String)
  83.     If Not Len(Trim(strValue)) = 0 Then
  84.         m_Valor = strValue
  85.     End If
  86. End Property
  87.  
  88. ' Guarda la información al Archivo INI
  89. ' ====================================
  90. Public Function GrabarLlave() As Boolean
  91.     Dim lRet As Long
  92.     Dim strPath As String
  93.     Dim fso As FileSystemObject
  94.    
  95.     Set fso = New FileSystemObject
  96.    
  97.     ' Verificar que exista el Directorio
  98.    If Not fso.FolderExists(m_Ruta) Then GoTo ErrHandler
  99.    
  100.     ' Armar la ruta completa, incluyendo el nombre del Archivo
  101.    If Right(m_Ruta, 1) = "\" Then
  102.         strPath = m_Ruta & m_Nombre
  103.     Else
  104.         strPath = m_Ruta & "\" & m_Nombre
  105.     End If
  106.  
  107.     ' Grabar la información al Archivo INI
  108.    lRet = WritePrivateProfileString(m_Seccion, m_Llave, m_Valor, strPath)
  109.     If lRet = 0 Then GoTo ErrHandler
  110.    
  111.     If Not fso Is Nothing Then Set fso = Nothing
  112.     GrabarLlave = True
  113.    
  114.     Exit Function
  115.    
  116. ErrHandler:
  117.     If Not fso Is Nothing Then Set fso = Nothing
  118.     GrabarLlave = False
  119. End Function
  120.  
  121. ' Borra una Llave dentro de una Sección del Archivo INI
  122. ' =====================================================
  123. Public Function BorrarLlave() As Boolean
  124.     Dim lRet As Long
  125.     Dim strPath As String
  126.     Dim fso As FileSystemObject
  127.    
  128.     Set fso = New FileSystemObject
  129.    
  130.     ' Verificar que se hayan establecido los valores Sección y Llave
  131.    If Len(Trim(m_Seccion)) = 0 Then GoTo ErrHandler
  132.     If Len(Trim(m_Llave)) = 0 Then GoTo ErrHandler
  133.    
  134.     ' Verificar que exista el Directorio
  135.    If Not fso.FolderExists(m_Ruta) Then GoTo ErrHandler
  136.    
  137.     ' Armar la ruta completa, incluyendo el nombre del Archivo
  138.    If Right(m_Ruta, 1) = "\" Then
  139.         strPath = m_Ruta & m_Nombre
  140.     Else
  141.         strPath = m_Ruta & "\" & m_Nombre
  142.     End If
  143.    
  144.     ' Borra una llave dentro de una Sección del Archivo INI
  145.    lRet = WritePrivateProfileString(m_Seccion, m_Llave, vbNullString, strPath)
  146.     If lRet = 0 Then GoTo ErrHandler
  147.    
  148.     If Not fso Is Nothing Then Set fso = Nothing
  149.     BorrarLlave = True
  150.    
  151.     Exit Function
  152.    
  153. ErrHandler:
  154.     If Not fso Is Nothing Then Set fso = Nothing
  155.     BorrarLlave = False
  156. End Function
  157.  
  158. ' Borra una Sección del Archivo INI
  159. ' =================================
  160. Public Function BorrarSeccion() As Boolean
  161.     Dim lRet As Long
  162.     Dim strPath As String
  163.     Dim fso As FileSystemObject
  164.    
  165.     Set fso = New FileSystemObject
  166.    
  167.     If Len(Trim(m_Seccion)) = 0 Then GoTo ErrHandler
  168.    
  169.     ' Verificar que exista el Directorio
  170.    If Not fso.FolderExists(m_Ruta) Then GoTo ErrHandler
  171.    
  172.     ' Armar la ruta completa, incluyendo el nombre del Archivo
  173.    If Right(m_Ruta, 1) = "\" Then
  174.         strPath = m_Ruta & m_Nombre
  175.     Else
  176.         strPath = m_Ruta & "\" & m_Nombre
  177.     End If
  178.    
  179.     ' Borra una seccion del Archivo INI
  180.    lRet = WritePrivateProfileString(m_Seccion, vbNullString, vbNullString, strPath)
  181.     If lRet = 0 Then GoTo ErrHandler
  182.    
  183.     If Not fso Is Nothing Then Set fso = Nothing
  184.     BorrarSeccion = True
  185.    
  186.     Exit Function
  187.    
  188. ErrHandler:
  189.     If Not fso Is Nothing Then Set fso = Nothing
  190.     BorrarSeccion = False
  191. End Function
  192.  
  193. ' Lee la información de una Llave dentro de una Sección del Archivo INI
  194. ' =====================================================================
  195. Public Function LeerLlave() As Boolean
  196.     Dim lRet As Long
  197.     Dim sDefault As String
  198.     Dim sRetValue As String * 256
  199.     Dim strPath As String
  200.     Dim fso As FileSystemObject
  201.    
  202.     Set fso = New FileSystemObject
  203.    
  204.     ' Verificar que se hayan establecido los valores Sección y Llave
  205.    If Len(Trim(m_Seccion)) = 0 Then GoTo ErrHandler
  206.     If Len(Trim(m_Llave)) = 0 Then GoTo ErrHandler
  207.    
  208.     ' Verificar que exista el Directorio
  209.    If Not fso.FolderExists(m_Ruta) Then GoTo ErrHandler
  210.    
  211.     ' Armar la ruta completa, incluyendo el nombre del Archivo
  212.    If Right(m_Ruta, 1) = "\" Then
  213.         strPath = m_Ruta & m_Nombre
  214.     Else
  215.         strPath = m_Ruta & "\" & m_Nombre
  216.     End If
  217.    
  218.     sDefault = ""
  219.     lRet = GetPrivateProfileString(m_Seccion, m_Llave, sDefault, sRetValue, Len(sRetValue), strPath)
  220.    
  221.     If lRet = 0 Then GoTo ErrHandler
  222.  
  223.     Valor = Left(sRetValue, lRet)
  224.     LeerLlave = True
  225.     If Not fso Is Nothing Then Set fso = Nothing
  226.    
  227.     Exit Function
  228.    
  229. ErrHandler:
  230.     If Not fso Is Nothing Then Set fso = Nothing
  231.     Valor = sDefault
  232.     LeerLlave = False
  233. End Function

Para utilizarlo:
Código vb:
Ver original
  1. Dim Contenido as String
  2.  
  3. ' Crear el objeto
  4. Private Configuracion As ArchivoINI
  5. Set Configuracion = New ArchivoINI
  6.  
  7. With Configuracion
  8.     ' Nombre del archivo. Si no se especifica ruta, tomara default el app.path
  9.    .Nombre = "miArchivo.ini"
  10.  
  11.     .Seccion = "miSeccion"
  12.     .Llave = "miLlave"
  13.  
  14.     ' Si no existe la llave dentro de la sección, generar error 380
  15.    If Not .LeerLlave Then Err.Raise 380, "miLlave"
  16.     Contenido = .Valor
  17.  
  18. End With
  19.  
  20. ' Limpiar el objeto
  21. If Not Configuracion Is Nothing Then Set Configuracion = Nothing

Recuerda que un archivo INI esta compuesto por secciones y llaves

Ejemplo de sección:
[Seccion1]
[ConfigBD]

Ejemplo de Sección y Llave:
[ConfigBD]
Servidor=125.2.204.52
Usuario=sa

Espero que te sea de utilidad.

Última edición por JonathanB; 02/12/2011 a las 21:01