Clase Ini totalmente funcional. (source)

Iniciado por Zeroql, 25 Mayo 2008, 17:23 PM

0 Miembros y 2 Visitantes están viendo este tema.

Zeroql

buenas a todos los foreros
Les traigo una clase dedicada a leer y guardar en archivos .ini
bueno aki el code de la clase:

Código (vb) [Seleccionar]
Option Explicit

'Función api que recupera un valor-dato de un archivo Ini
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
  ByVal lpApplicationName As String, _
  ByVal lpKeyName As String, _
  ByVal lpDefault As String, _
  ByVal lpReturnedString As String, _
  ByVal nSize As Long, _
  ByVal lpFileName As String) As Long

'Función api que Escribe un valor - dato en un archivo Ini
Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" ( _
  ByVal lpApplicationName As String, _
  ByVal lpKeyName As String, _
  ByVal lpString As String, _
  ByVal lpFileName As String) As Long

'Lee un dato _
-----------------------------
'Recibe la ruta del archivo, la clave a leer y _
el valor por defecto en caso de que la Key no exista

Public Function Leer_Ini(Path_INI As String,Section as String, Key As String, Default As Variant) As String
  Dim bufer As String * 256
  Dim Len_Value As Long
  Len_Value = GetPrivateProfileString(Section, Key, Default, bufer, Len(bufer), Path_INI)
  Leer_Ini = Left$(bufer, Len_Value)
End Function

'Escribe un dato en el INI _
-----------------------------

'Recibe la ruta del archivo, La clave a escribir y el valor a añadir en dicha clave
Public Function Grabar_Ini(Path_INI As String,Section as string, Key As String, Valor As Variant) As String
   WritePrivateProfileString Secition, Key, Valor, Path_INI
End Function


Para el formato del archivo ini se debe manejar asi:

[sección]
CLAVE1=VALOR
CLAVE2=VALOR
........


y para llamar a la funcion para leer el ini es:
Código (vb) [Seleccionar]
ClaseIni.Leer_Ini("Dir del archivo ini","Sistema","CLAVE a leer","un Valor Default sino existe tal valor en el ini o 0")


para guardar:
Código (vb) [Seleccionar]
Claseini.Grabar_Ini("Dir del archivo ini","Config","Clave donde guardar el valor","Valor a guardar")

Nota: Los nombres mostrados anteriormente antes de llarmar a la funcion es el nombre de la clase
para una mejor compresion de esto miremos un ejemplo:

Vamoss a llamara a la clase por un valor del ini dada una configuracion:
variable=ClaseIni.leer_Ini("C:\windows","Config",1001,0)
variable=ClaseIni.leer_Ini("C:\windows","Window","NOOPEN","Holas")

Y para guardar:

ClaseIni.Grabar_Ini("C:\windows","Config",1001,1)
ClaseIni.Grabar_Ini("C:\windows","Window","NOOPEN","YES")
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#


cobein

#1
@ Zeroql

Esto esta mal, la estructura del ini es sección, Clave, valor.

[sección]
CLAVE1=VALOR

en ese codigo tenes la sección como una constante :S

Edit: me retracto de lo anteriormente dicho, no esta mal puesto que es funcional, pero no esta bien implementado.
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

Zeroql

UMMM puede ser, pero dejemoslo asi para los novatos. al fin y acabo que esta pensada para ellos.
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#


naderST

La mejor clase para los ini que he visto y usado es la de Cobein k por cierto Cobein deberias postearla aca  :P

Zeroql

puede ser
cobein posteala en aca para comparar y que los demas se escojan cual les parece mejor no te parece?
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#


seba123neo

@ Cobein

me parece que es solo un modulo normal,¿¿es la que usabamos en los widget??,pues bueno si es esa,funciona perfecto..

saludos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

Kizar

#6
Lo he adaptado a mi manera:
Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" ( _
    ByVal lpApplicationName As String, _
    ByVal lpKeyName As String, _
    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 String, _
    ByVal lpString As String, _
    ByVal lpFileName As String) As Long

Private iSection As String
Private iPath As String

Public Sub Set_Path(sPath As String)
    iPath = sPath
End Sub

Public Sub Set_Section(sSection As String)
    iSection = sSection
End Sub

Public Function Leer_Ini(key As String) As String
    Dim sBuffer As String * 256, lenValue As Long
    lenValue = GetPrivateProfileString(iSection, key, "", sBuffer, Len(sBuffer), iPath)
    Leer_Ini = Left(sBuffer, lenValue)
End Function

Public Function Grabar_Ini(key As String, valor As Variant) As String
    WritePrivateProfileString iSection, key, valor, iPath
End Function

SKL (orignal)


cobein

A ver, no nos saquemos los ojos, lo mio fuo una critia u observacion nada mas, hice una critica con su respectiva justificacion para que si el considera que es valedera corrija el code y aprenda de ello, nada mas, esto no es una competencia de nada, personalmente valoro su aporte.

Con respecto a lo que decian, el modulo que hice NO es mejor que nada, es simple y esta incompleto, es solamente lo que necesitaba, no tiene enumeracion ni muchas cosas mas que tendria que tener para ser considerado siquiera COMPLETO.
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

Zeroql

Ya he modificado la clase gracias a la observacion de Cobein.
ya veran uds si les agrada o no, a mi me parece que esta muy completa y es algo pequeña. bueno al fin y al cabo el foro es para ayudar y opinar sobre los post.
al que le sirva bien.
y por sirto Kizar te muy kedo bien la modificacion.
Dime y lo olvido, enseñame y lo recuerdo, involucrame y lo aprendo.
/.-ZEROQL.-\   -----  #937675#