Usar archivos .ini

Iniciado por ranslsad, 10 Agosto 2006, 00:47 AM

0 Miembros y 1 Visitante están viendo este tema.

ranslsad

Hola amigos, yo lo que quiero es aprender a crear, modificar y leer archivos .ini, me explico con un ejemplo:

Tengo un text1.text y ese text esta vacio... pero al cargar el form lee el archivo .ini (en el ini pone Text1 = asd) y en el text 1 del form pone "asd" y si se modifica en el form que se guarde en el ini otra vez.... me explico?

Y otra cosa mas... como puedo hacer que cuando se ejecute mi aplicacion salga como un form presentacion... miren este ejemplo: http://foro.elhacker.net/index.php/topic,131856.0.html cuando se inicia el exe sale un form "raro" que dice los creditos....

Bueno desde ya Gracias ;)

Salu2

Ranslsad

_Sergi_

Aqui tienes, ligeramente comentado como utilizar las API GetPrivateProfileString y WritePrivateProfileString para usar archivos INI.

En un modulo Bas ponemos el siguiente codigo

'Declaración de las funciones API's para escribir y leer archivos INI.
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
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

'Función para leer los datos en archivos INI:
Public Function INI_Read(Filename As String, Key_Value As String, Key_Name As String, Optional ByVal Default As String) As String
'On Error GoTo ErrOut
Dim Size As Integer
Dim value As String

'Comprobamos que el archivo existe.
If Not SYS_FileExists(Filename) Then Err.Raise 53

'Se define el tamaño maximo de caracteres
'que podra tener la variable Value
value = Space(200)
'Se utiliza la función para obtener
'el valor de la clave
Size = GetPrivateProfileString(Key_Value, Key_Name, "", value, Len(value), Filename)
'Si el tamaño es mayor a -1 entonces
'se ha encontrado el valor de la clave
If Size > 0 Then
value = Left$(value, Size)
Else
INI_Read = Default
End If

'Devolver el dato...
'Verificar que el dato no sea nulo,
'en caso de ser nulo de se devuelve
'el valor por defecto (Default)
If Len(value) Then
INI_Read = value
Else
INI_Read = Default
End If
Exit Function

ErrOut:
INI_Read = Default
End Function

'Función para escrbir datos en archivos INI.
Public Function INI_Write(Filename As String, Key_Value As String, Key_Name As String, value As String) As Long
'On Error GoTo ErrOut
Dim Size As Integer

'Escribimos el valor de la clave en el INI
Size = WritePrivateProfileString(Key_Value, Key_Name, value, Filename)
INI_Write = 1
Exit Function

ErrOut:
INI_Write = 0
End Function


'Para usarlo
'Si nuestro archivo Ini ( Config.Ini ) es asi
[General]
Ruta="C:Sistema"
BaseDatos="Clientes.Mdb"

'En nuestro programa hacemos asi:
cRutaActual = INI_Read("Config.ini", "General", "Ruta", "C:")
cBaseDatos = INI_Read( "Config.Ini", "General", "BaseDatos", "Data.Mdb" )


Un saludo
Proyecto de Ingeniero

Castord

Un codigo usando apis es innecesario para una operacion en la que podes usar lectura y descomposicion de cadenas.
Mi Opinion Particular.
Desde Asunción - Paraguay
/*Es una ***** pero igual amo mi país!*/

ranslsad

Cita de: Castord en 11 Agosto 2006, 01:05 AM
Un codigo usando apis es innecesario para una operacion en la que podes usar lectura y descomposicion de cadenas.
Mi Opinion Particular.


Hola, podrias poner algun ejempolillo es que no se mucho sobre eso :D

Salu2

Ranslsad

SheKeL_C$

Yo t lo voy a decir sin apis..

X ejemplo tengo un programa q al ejecutarse coloca en el text1 el puerto local.. es x poner un ejemplo tu puedes utilizarlo para lo k kieras

Private Sub Form_Load()
On Error GoTo fuera

Dim cadena As String
Dim separa As Variant

Open App.Path & "\Configuracion.ini" For Input As #1
    While Not EOF(1)
        Line Input #1, cadena
        separa = Split(cadena, ":")
        If separa(0) = "LocalPort" Then Text1.Text = separa(1)
        'Esto solo lee el archivo y lo pone en el programa
    Wend
Close #1

fuera:
End Sub

Private Sub Form_Unload(Cancel As Integer)

Open App.Path & "\Configuracion.ini" For Output As #1
    Print #1, "LocalPort:" & Text1.Text
    'y aki lo escribe al cerrar
Close #1

End Sub


Creo q la idea esta explicada

Lo del form de creditos es un form normal

'Tienes k tener 2 form
Private Sub Form_Load()
Me.BorderStyle = 0
Timer1.Interval = 3000 'cuando pasan 3 segundos se cierra
End Sub

Private Sub Timer1_Timer()
Me.Hide
Form2.Show
End Sub

ranslsad

#5
Hola, SheKeL_C$ muchisimas gracias me as resuelto el problema de la mejor forma y mas sencilla!!
para txt es igual? porke lo probe y no funka mira:
Private Sub Form_Load()
On Error GoTo fuera

Dim cadena As String
Dim separa As Variant

Open App.Path & "\Configuracion.txt" For Input As #1
    While Not EOF(1)
        Line Input #1, cadena
        separa = Split(cadena, ":")
        If separa(0) = "Chau" Then Text1.Text = separa(1)
        'Esto solo lee el archivo y lo pone en el programa
    Wend
Close #1

fuera:
End Sub

Private Sub Form_Unload(Cancel As Integer)

Open App.Path & "\Configuracion.txt" For Output As #1
    Print #1, "Chau:" & Text1.Text
    'y aki lo escribe al cerrar
Close #1

End Sub


tambien cuando en el .ini pongo x ejemplo

ip:
LocalPort

me sale error :S
solo sirve para una linea?

desde ya... Gracias!!

Salu2

Ranslsad

kuki06

Yo (newbie en vb6) me "ingenie" una "funcion" para obtener datos desde un archivo y "hacer" algo con ellos :P
Ademas, no necesariamente necesitaras hacer un .ini o .txt, sino la extensión que tu quieras :P

Aca, mas o menos, te lo adapto a lo que vos queres

Private Sub Form_Load()

Ruta = "Tu Ruta" 'por ej: "C:\Archivo.ini"

On Error Resume Next

x = GetAttr(Ruta)

    Dim file As String
    Dim Msg As String
   
    Dim fileno As Integer
    Dim i As Integer
   
    Dim t(10000000) As Byte
   
    file = Ruta
    fileno = FreeFile()
   
    Open file For Binary As fileno
        For i = 1 To FileLen(file)
            Get fileno, i, t(i)
            Msg = Msg + Chr(t(i))
        Next
    Close fileno
   
    Text1.Text = Msg 'Textbox donde ira toda la "data"
End Sub


Eso seria para que cuando inicie el form se vuelque la "data" al textbox

Ahora, para hacer que cuando cierre guarde la "data" es lo siguiente:


Private Sub Form_Unload(Cancel As Integer)

Ruta = "Ruta" (si, otra vez xD)

Canal = Freefile
Open Ruta For output as #canal
Print #canal, text1.text 'Textbox donde estara la "data" para guardar
Close #canal
End sub


Aclaro, que los codigos no son los mas perfectos, ya que muchos conocimientos no tengo, pero son "buenos" por asi decirlo jeje

Saludos!

SheKeL_C$

En el *.ini o en el *.txt tiene k estar escrito como "LocalPort:6969" y la siguiente linea tiene q venir las siguientes ya sea "Nombre:yo".
(todo eso pero sin comillas)


Y en el code tienes q agregar mas lineas
Open App.Path & "\Configuracion.txt" For Input As #1
    While Not EOF(1)
        Line Input #1, cadena
        separa = Split(cadena, ":")
        If separa(0) = "LocalPort" Then Text1.Text = separa(1)
        If separa(0) = "Nombre" Then Text2.Text = separa(1)
    Wend
Close #1


P.D: en el ini t vuelvo a recordar q debe de estar primero el nombre de lo k es, luego separado de los dos puntos y luego la variable

ranslsad

Hola, muchas gracias por toda la informacion brindada, pero como podria hacer para que se lea el archivo.txt en distintos textbox.. me explico con un ejemplo
En el archivo.txt pone:

IP:10
LocalPort:10


y yo necesitaria que en dos textbox de un form cargue en el text 1 ip y en el text2 localport entienden?

Bueno... desde ya gracias :D

Salu2

Ranslsad