none
No puedo localizar la linea correcta y mostrarla en una etiqueta RRS feed

  • Pregunta

  • Hola tengo un problema al querer mostrar unos datos de un archivo de texto.

    Primero lo que hago es con un combobox seleccionar el texto que quiero localizar dentro del archivo de texto, despues trato de desplegarlo en una etiqueta para que sea mostrado en mi pantalla ese mismo texto, pero lo que encuentro en el desarrollo es que siempre localiza en el archivo de texto una linea abajo y es lo que me muestra por ejemplo:

    Busco una linea que contenga el texto C1, va al archivo y me localiza y muestra en la forma la siguiente linea o sea C2, esta es la rutina que tengo actualmente.

        Private Sub ComboBox6_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox6.SelectedIndexChanged

            Dim Xread As System.IO.StreamReader
            Dim LineNumber As Integer
            Dim nthLine As String = Nothing
            Dim n As Integer
            Try

                If ModSel = "041802" Then

                    Xread = File.OpenText("J:\ICT_Files\041802_BOM_REV.txt")
                    Do Until Xread.EndOfStream
                        If Xread.ReadLine.Contains(ComboBox6.Text) = True Then Exit Do
                        'Label13.Text = Xread.ReadLine & vbCrLf
                        End If
                Loop
                Label13.Text = Xread.ReadLine & vbCrLf
                Xread.Close()
            ' End If
        End Sub

        Private Sub ComboBox7_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ComboBox7.SelectedIndexChanged
            If ComboBox7.Text = "041802" Then
                ModSel = ComboBox7.Text
            End If
        End Sub

    Saludos y espero que me puedan ayudar ya que creo que es algo un poco sencillo pero apenas estoy empezando en esto.

    viernes, 9 de diciembre de 2016 13:57

Respuestas

  • AC2016,

    Puedes hacer lo mismo utilizando el método ReadAllLines():

    Private Sub ComboBox6_SelectionChangeCommitted(sender As Object, e As EventArgs)
    
    	If ModSel = "041802" Then
    		Label13.Text = File.ReadAllLines("J:\ICT_Files\041802_BOM_REV.txt", Encoding.Default).
    			Where(Function(x) x.ToUpper.Contains(ComboBox6.Text.ToUpper)).FirstOrDefault()
    	End If
    
    End Sub

    No olvides indicar el espacio de nombres: Imports System.Linq


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 9 de diciembre de 2016 18:51

Todas las respuestas

  • Eliminen esto. O desmarquen, así lo elimino yo.

    • Propuesto como respuesta Joyce_ACModerator viernes, 9 de diciembre de 2016 15:40
    • Editado walter_5 jueves, 15 de diciembre de 2016 0:31
    • Votado como útil Joyce_ACModerator viernes, 16 de diciembre de 2016 15:49
    viernes, 9 de diciembre de 2016 14:24
  • Buenos días, 

     Al realizar la evaluación del contenido de la cadena indicada el readline consume dicha línea, por lo que al tratar de asignar el valor al label será la línea siguiente, por lo tanto, te aconsejo que crees una variable le asignes el valor del readline y trabajes con dicha variable.


    viernes, 9 de diciembre de 2016 14:38
  • AC2016,

    Puedes hacer lo mismo utilizando el método ReadAllLines():

    Private Sub ComboBox6_SelectionChangeCommitted(sender As Object, e As EventArgs)
    
    	If ModSel = "041802" Then
    		Label13.Text = File.ReadAllLines("J:\ICT_Files\041802_BOM_REV.txt", Encoding.Default).
    			Where(Function(x) x.ToUpper.Contains(ComboBox6.Text.ToUpper)).FirstOrDefault()
    	End If
    
    End Sub

    No olvides indicar el espacio de nombres: Imports System.Linq


    Espero que la información proporcionada te haya sido de utilidad, quedo atento a tus comentarios.
    viernes, 9 de diciembre de 2016 18:51