Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Visual Basic 2005: Grabar y leer .ini

Estas en el tema de Visual Basic 2005: Grabar y leer .ini en el foro de Visual Basic clásico en Foros del Web. Hola amigos, soy nuevo en el foro y me parece una página muy interesante e informativa como todos los informáticos andamos buscando. Me gustaría saber ...

  #1 (permalink)  
Antiguo 01/07/2008, 21:26
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Visual Basic 2005: Grabar y leer .ini

Hola amigos, soy nuevo en el foro y me parece una página muy interesante e informativa como todos los informáticos andamos buscando.

Me gustaría saber algo de sus conocimientos pues tengo duda en una tarea que me dejaron en la universidad:

Resulta que tengo un Windows Form con dos textbox y un button, necesito que cuando agrego los datos a los textbox y luego oprimimos Agregar, este agregar incluye en un archivo .ini que servira para leer los datos en este programa como guardarlos. Me gustaría que me ayuden, gracias!!!

  #2 (permalink)  
Antiguo 02/07/2008, 07:45
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005: Grabar y leer .ini

Este tema ya se ha tratado aquí:
http://www.forosdelweb.com/f69/fiche...2005-a-587064/

No olvides que puedes usar el buscador para saber si el problema ya no ha sido resuelto en otro tema.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 03/07/2008, 02:55
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por moradazo Ver Mensaje
Hola amigos, soy nuevo en el foro y me parece una página muy interesante e informativa como todos los informáticos andamos buscando.

Me gustaría saber algo de sus conocimientos pues tengo duda en una tarea que me dejaron en la universidad:

Resulta que tengo un Windows Form con dos textbox y un button, necesito que cuando agrego los datos a los textbox y luego oprimimos Agregar, este agregar incluye en un archivo .ini que servira para leer los datos en este programa como guardarlos. Me gustaría que me ayuden, gracias!!!
Hola,

si lo que quieres es grabarlos con una única sección, puedes utilizar la API WritePrivateProfileSection.

Supongamos que la sección la quieres llamar "Usuarios" y cada vez que cliques en el botón Agregar, añada nombre y a pellidos al archivo.ini

Código:
Public Class Form1
   
    <Runtime.InteropServices.DllImport("kernel32.dll", SetLastError:=True)> _
    Private Shared Function WritePrivateProfileSection(ByVal lpAppName As String, _
                                                       ByVal lpString As String, _
                                                       ByVal lpFileName As String) As Long
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        WritePrivateProfileSection("Usuarios", TextBox1.Text & " " & TextBox2.Text, "C:\Temp.ini")

    End Sub

End Class

  #4 (permalink)  
Antiguo 05/07/2008, 05:32
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por Avellaneda Ver Mensaje
Hola,

si lo que quieres es grabarlos con una única sección, puedes utilizar la API WritePrivateProfileSection.
Muchas gracias
Una pregunta más, como hago para que me lea del .ini lo que quiero que lea, o no se puede?
  #5 (permalink)  
Antiguo 05/07/2008, 12:25
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por moradazo Ver Mensaje
Muchas gracias
Una pregunta más, como hago para que me lea del .ini lo que quiero que lea, o no se puede?
No entiendo lo que quieres decir, con los parámetros que le pasas a GetPrivateProfileString eliges lo que quieres que te muestra.

Has leído lo que publicaron en el enlace que te sugerí?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 06/07/2008, 08:27
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Visual Basic 2005: Grabar y leer .ini

No, es que está utilizando un fichero con una única sección sin llaves (Keys) por lo tanto no le vale GetPrivateProfileString, sino GetPrivateProfileSection:

moradazo: siguiendo el ejemplo que puse anteriormente, para leer el archivo:
Aquí listamos todos los nombres de la sección "Usuarios" en un control ListBox.

Código:
<Runtime.InteropServices.DllImport("kernel32.dll", SetLastError:=True)> _
    Private Shared Function GetPrivateProfileSection(ByVal lpAppName As String, _
                                                        ByVal lpReturnedString As IntPtr, _
                                                        ByVal nSize As Integer, _
                                                        ByVal lpFileName As String) As Short
    End Function
    
    Private Sub btnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListar.Click
        'creamos la cadena de caracteres
        Dim sb As New System.Text.StringBuilder(255)
        ' asignamos la memoria al puntero
        Dim ip As IntPtr = Runtime.InteropServices.Marshal.AllocHGlobal(255)
        Try
            Dim bt As Byte = GetPrivateProfileSection("Usuarios", ip, 255, "C:\Temp.ini")

            For i As Integer = 0 To bt - 1
                ' convertimos los bytes a caracteres y los añadimos al StringBuilder
                sb.Append(Convert.ToChar(Runtime.InteropServices.Marshal.ReadByte(ip, i)))
            Next
            ' eliminamos el último carácter que es nulo
            sb.Remove(sb.Length - 1, 1)
            ' limpiamos el TextBox y añadimos cada línea de la sección [Usuarios]
            ListBox1.Items.Clear()
            For Each line As String In sb.ToString().Split(Convert.ToChar(0))
                ListBox1.Items.Add(line)
            Next
        Catch ex As System.Exception
            System.Windows.Forms.MessageBox.Show(ex.Message)
        Finally
            ' liberamos la memoria
            Runtime.InteropServices.Marshal.FreeHGlobal(ip)
        End Try
    End Sub
  #7 (permalink)  
Antiguo 06/07/2008, 14:56
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por Avellaneda Ver Mensaje
No, es que está utilizando un fichero con una única sección sin llaves (Keys) por lo tanto no le vale GetPrivateProfileString, sino GetPrivateProfileSection
Ya veo. Nuevamente gracias me ha funcionado de maravilla. Pero tengo otra consulta con respecto a esto (es que cuando lo programo se me ocurren otras situaciones)

En vez de un listbox debo poner un ListView con el fin de independizar NOMBRE y APELLIDO. A la hora de cambiarlo me salen una serie de errores, obviamente le quité algunas cosas y cambié para que leyera el listview.

Por ejemplo esta parte de mostrar

LVdato es el ListView
For Each line As String In sb.ToString().Split(Convert.ToChar(0))
LVdato.Items.Add(line)
Next


Supongo que para que leyera la siguiente columna debía escribir
LVdato.Items(LVdato.Items.Count - 1).SubItems.Add(lista2)

Ese lista2 es otro FOR que hace lo mismo para lista, serían 2 FOR anidados pero no me corre por cuestiones ya de desconocimiento de mi parte.

Si son tan amables de ayudarme con esto, gracias. Aquí les dejo una imagen de mi ventana

  #8 (permalink)  
Antiguo 07/07/2008, 04:06
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por moradazo Ver Mensaje
Ya veo. Nuevamente gracias me ha funcionado de maravilla. Pero tengo otra consulta con respecto a esto (es que cuando lo programo se me ocurren otras situaciones)

En vez de un listbox debo poner un ListView con el fin de independizar NOMBRE y APELLIDO. A la hora de cambiarlo me salen una serie de errores, obviamente le quité algunas cosas y cambié para que leyera el listview.

Por ejemplo esta parte de mostrar

LVdato es el ListView
For Each line As String In sb.ToString().Split(Convert.ToChar(0))
LVdato.Items.Add(line)
Next


Supongo que para que leyera la siguiente columna debía escribir
LVdato.Items(LVdato.Items.Count - 1).SubItems.Add(lista2)

Ese lista2 es otro FOR que hace lo mismo para lista, serían 2 FOR anidados pero no me corre por cuestiones ya de desconocimiento de mi parte.
Hola,
se me ocurre que podrías separar el nombre y los apellidos por una coma.

Al escribir en el .ini:
WritePrivateProfileSection("Usuarios", TextBox1.Text & "," & TextBox2.Text, "C:\Temp.ini")
Nota: La coma sin espacios, ni delante ni detrás.

Y al pasarlo al ListView:
Código:
Dim lvi As ListViewItem
For Each line As String In sb.ToString().Split(Convert.ToChar(0))
    Dim iPos As Integer = InStr(line, ",") - 1
    lvi = ListView1.Items.Add(Microsoft.VisualBasic.Left(line, iPos))
    lvi.SubItems.Add(Microsoft.VisualBasic.Right(line, Len(line) - iPos - 1))
Next
  #9 (permalink)  
Antiguo 07/07/2008, 22:37
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Mensaje Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por Avellaneda Ver Mensaje
Hola,
se me ocurre que podrías separar el nombre y los apellidos por una coma.
Gracias por la ayuda de verdad!

No quiero parecer un ignorante que pregunta por todo, pero cuando me sale un error busco todas las maneras de solventarlo y créanme que paso horas!

Con el código que me pasaste dice que el ancho de la cadena debe ser mayor o igual a 0, el error me lo manda en la línea señalada en rojo, mira:


Código:
 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        WritePrivateProfileSection("Usuarios", TextBox1.Text & "," & TextBox2.Text, "C:\Temp.ini")
        TextBox1.Clear()
        TextBox2.Clear()
    End Sub
    Private Sub btnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListar.Click
        Dim sb As New System.Text.StringBuilder(255)
        Dim lvi As ListViewItem
        For Each line As String In sb.ToString().Split(Convert.ToChar(0))
            Dim iPos As Integer = InStr(line, ",") - 1
            lvi = LVdato.Items.Add(Microsoft.VisualBasic.Left(line, iPos))
            lvi.SubItems.Add(Microsoft.VisualBasic.Right(line, Len(line) - iPos - 1))
        Next

    End Sub
Debo decir que siempre estoy guardando dato en el .ini
Le agradezco su ayuda.
  #10 (permalink)  
Antiguo 08/07/2008, 01:07
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por moradazo Ver Mensaje
Gracias por la ayuda de verdad!

No quiero parecer un ignorante que pregunta por todo, pero cuando me sale un error busco todas las maneras de solventarlo y créanme que paso horas!

Con el código que me pasaste dice que el ancho de la cadena debe ser mayor o igual a 0, el error me lo manda en la línea señalada en rojo, mira:

...
Debo decir que siempre estoy guardando dato en el .ini
Le agradezco su ayuda.

Hola,
no te preocupes, cuando se tienen dudas es mejor preguntar.

El error es porque, seguramente hay alguna línea en el archivo "Temp.ini" que no están separados el nombre y los apellidos por una coma (quizá estás utilizando el archivo anterior)

  #11 (permalink)  
Antiguo 08/07/2008, 19:57
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Grabar y leer .ini

Gracias amigo, hice lo que me dijiste y tenías razón debí borrar el .ini para inicializar.

Ahora tengo otro problema: Resulta que quiero agregar un diccionario y la cadena del significado en algunas cadenas es grande, que puedo hacer para que el programa pueda aceptarme cadenas largas?

Gracias


Última edición por moradazo; 08/07/2008 a las 22:10
  #12 (permalink)  
Antiguo 09/07/2008, 04:35
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por moradazo Ver Mensaje
Gracias amigo, hice lo que me dijiste y tenías razón debí borrar el .ini para inicializar.

Ahora tengo otro problema: Resulta que quiero agregar un diccionario y la cadena del significado en algunas cadenas es grande, que puedo hacer para que el programa pueda aceptarme cadenas largas?
¿Y dónde están los datos?. Lo aconsejable sería en una base de datos con un campo LongText (SQL) o Memo (Access) si la cadena va a sobreparar los 255 caracteres.

Y para mostrar cadenas grandes, el control ListView no es el mas aconsejable (tendrías que ir desplazando el Scroll horizontal para leer todo el texto), yo lo sustuiría por un TextBox para "Treat" y un RichTextBox para mostrar el campo Memo.

  #13 (permalink)  
Antiguo 09/07/2008, 15:07
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por Avellaneda
¿Y dónde están los datos?. Lo aconsejable sería en una base de datos con un campo LongText (SQL) o Memo (Access) si la cadena va a sobreparar los 255 caracteres.

Y para mostrar cadenas grandes, el control ListView no es el mas aconsejable (tendrías que ir desplazando el Scroll horizontal para leer todo el texto), yo lo sustuiría por un TextBox para "Treat" y un RichTextBox para mostrar el campo Memo.
Pero en un listview si puedo agregar cadenas grandes de mas de 300 caracteres inclusive, eso si, leidas en memoria, con texto dentro de la programacion, no agregada como lo pense hacer. Ademas el listview es mas amigable para el usuario por que ya estando ahi, tengo una funcion que al dar doble clic agrega lo que esta en el listview a un textbox:

If listview1.SelectedItems.Count = 0 Then Exit Sub
For i As Integer = listview1.SelectedItems.Count - 1 To 0 Step -1
textbox1.AppendText(listview1.SelectedItems(i).Tex t & vbCrLf & vbCrLf)
Next

Digamos que quiero agregar a la cadena el texto de este post, me da ese error, hay alguna declaracion o alguna otra variable que pueda hacer que la cadena soporte mas caracteres para ese listview? gracias
  #14 (permalink)  
Antiguo 22/07/2008, 21:35
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Grabar y leer .ini

Hola vuelvo a este tema de nuevo.
Digamos tengo esta información en un archivo .ini

[level_1]
data="Usuario"

[level_2]
data="Nombre1"
[level_3]
data="Apellidos1"

[level_2]
data="Nombre2"
[level_3]
data="Apellidos2"

[level_2]
data="Nombre3"
[level_3]
data="Apellidos3"

[level_2]
data="Nombre4"
[level_3]
data="Apellidos4"

Este archivo .ini tiene 3 árboles donde el primero es el nombre de usuario, la otra el segundo el nombre y el tercero el apellido.

Y estoy usando este código que me dio Avellaneda pero por más que cambie variables y sentencias no puedo hacer que el código logre leer este formato del archivo ini.

Código:
Private Sub btnListar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnListar.Click
        'creamos la cadena de caracteres
        Dim sb As New System.Text.StringBuilder(255)
        ' asignamos la memoria al puntero
        Dim ip As IntPtr = Runtime.InteropServices.Marshal.AllocHGlobal(255)
        Try
            Dim bt As Byte = GetPrivateProfileSection("Usuarios", ip, 255, "C:\Temp.ini")

            For i As Integer = 0 To bt - 1
                ' convertimos los bytes a caracteres y los añadimos al StringBuilder
                sb.Append(Convert.ToChar(Runtime.InteropServices.Marshal.ReadByte(ip, i)))
            Next
            ' eliminamos el último carácter que es nulo
            sb.Remove(sb.Length - 1, 1)
            ' limpiamos el TextBox y añadimos cada línea de la sección [Usuarios]
            ListBox1.Items.Clear()
            For Each line As String In sb.ToString().Split(Convert.ToChar(0))
                ListBox1.Items.Add(line)
            Next
        Catch ex As System.Exception
            System.Windows.Forms.MessageBox.Show(ex.Message)
        Finally
            ' liberamos la memoria
            Runtime.InteropServices.Marshal.FreeHGlobal(ip)
        End Try
    End Sub
Si me pueden ayudar con esta parte les agradeceré mucho
  #15 (permalink)  
Antiguo 23/07/2008, 07:01
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005: Grabar y leer .ini

Según tengo entendido, las secciones deben ser únicas en un archivo *.ini. Es posible que ese sea el problema en tu archivo, ya que tienes varias secciones con nombres repetidos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #16 (permalink)  
Antiguo 23/07/2008, 08:41
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por David el Grande Ver Mensaje
Según tengo entendido, las secciones deben ser únicas en un archivo *.ini. Es posible que ese sea el problema en tu archivo, ya que tienes varias secciones con nombres repetidos.
Si David lo que pasa es que esas secciones llamadas Level_1, Level_2 y Level_3 son repetidas que los distingue una "variable" donde viene el nombre de esas secciones, mira el caso:

[level_1]
data="Usuario"

Level_1 es el nombre de la seccion, y la variable "data" distingue a la seccion como unica. Yo se que es mas complicado hacerlo asi, pero me lo piden en la universidad a ver si puedo mediante ustedes aprobar esta asignacion que me hicieron. Ojo, tambien estoy tratando de hacerlo, si ya supiera les aviso por aca.

Muchas gracias!
  #17 (permalink)  
Antiguo 23/07/2008, 17:17
Avatar de reel  
Fecha de Ingreso: febrero-2004
Ubicación: Managua, Nicaragua
Mensajes: 496
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: Visual Basic 2005: Grabar y leer .ini

Hola moradazo,

La repuesta de David es correcta, conceptualmente no se puede tener dos secciones con el mismo nombre. Sin quererlo estás violando los principios de un archivo .INI.

Te recomiendo que estructures el archivo como si fuera un .INI pero debes leerlo como un archivo texto plano, es decir que no use las API de windows.

Con eso ya resolverás.
__________________
Leer es Saber, REEL.
Mi Blog
  #18 (permalink)  
Antiguo 24/07/2008, 12:20
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Grabar y leer .ini

Ok ya entendi, de hecho el archivo que tiene ese formato pensaba que era un .ini pero en realidad es un .txt

la cuestion es que necesito meter level2 y level3 en el listview por fila. Cada level1 tiene N cantidad de level2 y level3, entonces como haria para que Visual Basic me lea estas instrucciones y con el archivo de texto .txt

la clave para diferenciar level_1 es lo que contenga data, o sea, "usuario". Level_1 es como un boton que al accionarlo despliega en una columna del listview cada level_2 y en la otra columna cada level_3

[level_1]
data="Usuario"

[level_2]
data="Nombre1"
[level_3]
data="Apellidos1"

[level_2]
data="Nombre2"
[level_3]
data="Apellidos2"

[level_2]
data="Nombre3"
[level_3]
data="Apellidos3"

[level_2]
data="Nombre4"
[level_3]
data="Apellidos4"
  #19 (permalink)  
Antiguo 24/07/2008, 13:16
Avatar de reel  
Fecha de Ingreso: febrero-2004
Ubicación: Managua, Nicaragua
Mensajes: 496
Antigüedad: 20 años, 3 meses
Puntos: 1
Respuesta: Visual Basic 2005: Grabar y leer .ini

Acá te dejo un enlace para que lo estudies, me parece que te puede ayudar mucho.

http://www.homeandlearn.co.uk/NET/nets8p3.html

Saludos
__________________
Leer es Saber, REEL.
Mi Blog
  #20 (permalink)  
Antiguo 25/07/2008, 07:52
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Modificar textbox

Bueno si el link que me diste fue una ayuda muy buena.

Ahora mi pregunta es esta: En el texbox1 tengo esto

[level_1]
caption="GENERAL COMMENTS"


Y tengo esta instruccion:

TextBox2.Text = Replace(TextBox1.Text, cadena1, cadena2)

En cadena1 pongo el texto a modificar y en cadena2 el texto reemplazante. Yo hice esta instruccion de la siguiente manera:

TextBox2.Text = ((Replace(TextBox1.Text, ("[level_1]" & vbCrLf & "caption="""), "[")))

Y me genera este resultado:

[GENERAL COMMENTS"

Lo que yo necesito es que me quede asi: [GENERAL COMMENTS] para que mi funcion de leer un .ini me funcione, en otras palabras un convertidor de txt a ini.

En mi txt tengo 20 level_1 por eso debo escribir una intruccion en el codigo fuente para que me reemplaze todos los level_1 que hay.

Nota: No puedo reemplazar el " solo por un ] pues en los level_2 y level 3 tengo tambien "

Habra alguna instruccion que copie solo lo que me interese del textbox? Gracias!!!
  #21 (permalink)  
Antiguo 25/07/2008, 08:32
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Exclamación Respuesta: Visual Basic 2005: Grabar y leer .ini

Lo siento, pero no entendí lo que quieres hacer. Puedes agregarle un & "]" al final pero al parecer no es ese el problema.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #22 (permalink)  
Antiguo 25/07/2008, 10:30
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Grabar y leer .ini

Mira te explico: Yo ocupo por medio de reemplazos convertir esto:

[level_1]
caption="GENERAL COMMENTS"
data="General Comments"
[level_2]
caption="NO SPECIFIC COMMENTS NEEDED"
data="No specific comments needed"
[level_3]
caption="Tratamiento realizado/modificado de acuerdo a sus instrucciones."
data="Treatment done/modified per your instructions"


en esto:
[General Comments]
No specific comments-Treatment donde/modified per your instrucions


Necesito saber como hacer que mi programa recorra linea por linea y que borre todo donde diga caption o sea esa linea, el que dice data ese si lo ocupo y le quitaria donde dice data=" dejandole el comentario y luego hago un borrado general de todas las comillas ("), esto ultimo si lo tengo y lo hago con esta instruccion:

'TextBox2.Text = Replace(TextBox1.Text, ("data="), "")

En sintesis lo que ocupo es que el programa sepa que cuando una linea empieze por caption, borre toda la linea.

Si son tan amables les agradeceria mucho. Gracias!
  #23 (permalink)  
Antiguo 27/07/2008, 19:36
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Grabar y leer .ini

Alguien me puede ayudar con este problema?

Solo ocupo una función que me borre todas las líneas de un textbox que empiezen con "caption" junto con toda la cadena que le sigue. Con la función replace solo me quita "caption" lo demás no, así que si alguien sabe como eliminar líneas en un textbox por favor si me pueden ayudar.

Acá tengo un código que recorre todas las líneas pero no se como poner una condición para decirle que cuando la línea empieze por caption que me lo borre.

Código:
Private Sub generalcomments_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles generalcomments.Click
        Dim FILE_NAME As String = "C:\Documents and Settings\Allan\Escritorio\comments2.txt"
        Dim TextLine As String
       
        If System.IO.File.Exists(FILE_NAME) = True Then
            Dim objReader As New System.IO.StreamReader(FILE_NAME)
            Do While objReader.Peek() <> -1
                    TextLine = TextLine & objReader.ReadLine() & vbNewLine
                   Loop
            TextBox1.Text = TextLine
        Else
            MsgBox("File Does Not Exist")
        End If
           End Sub
  #24 (permalink)  
Antiguo 28/07/2008, 04:01
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por moradazo Ver Mensaje
Alguien me puede ayudar con este problema?

Solo ocupo una función que me borre todas las líneas de un textbox que empiezen con "caption" junto con toda la cadena que le sigue. Con la función replace solo me quita "caption" lo demás no, así que si alguien sabe como eliminar líneas en un textbox por favor si me pueden ayudar.

Acá tengo un código que recorre todas las líneas pero no se como poner una condición para decirle que cuando la línea empieze por caption que me lo borre.
Hola, casi mejor hubiera sido que crearas un nuevo tema ya que lo que preguntas ahora no tiene nada que ver con el título original.

En vez de borrar las líneas del TextBox una vez cargado desde el .txt, creo que sería mejor que si la línea empieza por dicha palabra, la omita.

Basándonos en tu código, prodría ser algo así:

Código:
If System.IO.File.Exists(FILE_NAME) = True Then
            Dim objReader As New System.IO.StreamReader(FILE_NAME)
            Dim sLinea As String = ""
            Do While objReader.Peek() <> -1
                sLinea = objReader.ReadLine()
                If Not sLinea.StartsWith("caption") Then
                    TextLine = TextLine & sLinea & vbNewLine
                End If
            Loop
            TextBox1.Text = TextLine
        Else
            MsgBox("File Does Not Exist")
        End If
Un saludo
  #25 (permalink)  
Antiguo 28/07/2008, 13:03
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Grabar y leer .ini

Muchas gracias Avellaneda, me sacaste de un gran apuro.
El tema en si, tienes razon la verdad al titulo del tema a mi ultima solicitud hay diferencias, lo que pasa es que conforme pasa los post y el desarrollo de mi codigo, me surgen nuevas dudas pero bueno el tema sirve para muchos que tienen mi misma duda, la manipulacion de datos entre archivos *.ini y *.txt con los textbox y otras alternativas de mover informacion a travez de varios controles de Visual Basic.

Igualmente estare constante en el foro para colaborar.

Gracias a todos los que me ayudaron!
  #26 (permalink)  
Antiguo 29/07/2008, 08:49
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Visual Basic 2005: Leer variables en una funcion

Hola como estan

Pues vengo con el codigo que Avellaneda me ayudo a estructurarlo para indicarles o solicitarles lo siguiente:

Resulta que en base a este codigo, el recorrido de lineas es desde un archivo .txt, la pregunta es como hacer el mismo recorrido pero desde una variable, ejemplo que todo el texto que viene en el TXT se cargue en un "dim variable as String" y que la funcion cargue la informacion desde la variable.

Gracias!

Código:
 Private Sub funcion()
        Dim ip As IntPtr = Runtime.InteropServices.Marshal.AllocHGlobal(100000)
        Dim sb As New System.Text.StringBuilder(100000)
        Dim bt As Integer = GetPrivateProfileSection(LBLtitle.Text, ip, 100000, "C:\test.txt")
        Try
            For i As Integer = 0 To bt - 1
                sb.Append(Convert.ToChar(Runtime.InteropServices.Marshal.ReadByte(ip, i)))
            Next
            sb.Remove(sb.Length - 1, 1)
            ListView1.Items.Clear()
            Dim lvi As ListViewItem
            For Each line As String In sb.ToString().Split(Convert.ToChar(0))
                Dim iPos As Integer = InStr(line, "*") - 1
                lvi = ListView1.Items.Add(Microsoft.VisualBasic.Right(line, Len(line) - iPos))
                lvi.SubItems.Add(Microsoft.VisualBasic.Left(line, iPos))
            Next
        Catch ex As System.Exception
            System.Windows.Forms.MessageBox.Show(ex.Message)
        Finally
            Runtime.InteropServices.Marshal.FreeHGlobal(ip)
        End Try
    End Sub
  #27 (permalink)  
Antiguo 02/08/2008, 20:23
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Grabar y leer .ini

Bueno mi duda fue la que previamente escribí, si se puede cargar desde una variable, o en vez de leer de un archivo como el código anterior, leer desde un textbox. Gracias!
  #28 (permalink)  
Antiguo 03/08/2008, 02:34
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por moradazo Ver Mensaje
Bueno mi duda fue la que previamente escribí, si se puede cargar desde una variable, o en vez de leer de un archivo como el código anterior, leer desde un textbox. Gracias!
Bueno, en realidad no entendí muy bien lo que quieres; para cargar todo el contenido del archivo txt, y siguiendo con el primer ejemplo, puedes hacer algo así:

Código:
If System.IO.File.Exists(FILE_NAME) = True Then
            Dim objReader As New System.IO.StreamReader(FILE_NAME)
            ' guardamos en la variable sText el contenido del .txt
            Dim sText As String = objReader.ReadToEnd
            ' y la mostramos en el TextBox
            TextBox1.Text = sText
        Else
            MsgBox("File Does Not Exist")
        End If
Pero ojo! el código que pones en el post anterior, es para leer un archivo separado por secciones [] tipo .ini a través de la función GetPrivateProfileSection

  #29 (permalink)  
Antiguo 04/08/2008, 00:34
Avatar de moradazo  
Fecha de Ingreso: julio-2008
Ubicación: [email protected]
Mensajes: 355
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Visual Basic 2005: Grabar y leer .ini

Muchas gracias Avellaneda siempre tan oportuno!
El código me funcionó de maravilla la verdad es que son cosas que de verdad no conocía. Por la parte que me dices que no me entendiste es lo siguiente:

Lo que yo necesito es que desde un textbox me recorra línea por línea para poder decir si una línea empieza por "caption" por ejemplo entonces me la borre, pero que siga leyendo de un textbox, me entiendes? Gracias!
  #30 (permalink)  
Antiguo 04/08/2008, 02:09
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Visual Basic 2005: Grabar y leer .ini

Cita:
Iniciado por moradazo Ver Mensaje
Muchas gracias Avellaneda siempre tan oportuno!
El código me funcionó de maravilla la verdad es que son cosas que de verdad no conocía. Por la parte que me dices que no me entendiste es lo siguiente:

Lo que yo necesito es que desde un textbox me recorra línea por línea para poder decir si una línea empieza por "caption" por ejemplo entonces me la borre, pero que siga leyendo de un textbox, me entiendes? Gracias!
¿Eso no se solucionó en la respuesta #24?

Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:31.