none
Buscar un string de un texto desde abajo

    Pregunta

  • Buenas tardes,

    Antes de nada muchísimas gracias por la ayuda que ofrecéis en el foro.

    Aprendiendo cada día más aunque a veces hay problemas que no puedo solventar.

    Uno de estos problemas es encontrar un string dentro de un fichero leyendo desde abajo hasta arriba y no al revés.

    Me enseñaron como hacerlo desde arriba sLine = objReader.ReadLine() pero tengo un txt el cual tiene más de un valor repetido y quisiera buscar el último.

    Ejemplo:

     

    0000001............. HardwareInfo
     .                      NAME: ACL  REV:2 
     .                      NAME: OPL  REV:3  

    0000453............. HardwareInfo
     .                      NAME: ACL  REV:3 
     .                      NAME: OPL  REV:4 

    XXXXXXX............. HardwareInfo 
     .                      NAME: ACL  REV:3 
     .                      NAME: OPL  REV:20 

    Quiero buscar el NAME de XXXXXXX no recorrer desde 0000001 sólamente el de  XXXXXXX.

    Los valores  XXXXXXX,  0000001, 0000453 son inventados. No son autonuméricos, Son valores al azar.

    Muchas gracias.

    Saludos.

    Javier.



    • Editado JaviLin martes, 11 de octubre de 2016 14:19
    martes, 11 de octubre de 2016 14:16

Respuestas

  • El problema es que no se como hacer para examinarlo en sentido descendente

    No puedes. El StreamReader no tiene esa funcionalidad. Por lo tanto, tienes que prescindir del StreamReader y hacerlo de otra manera. Yo te sugeria una forma de hacerlo, que consiste en cargar todo el fichero en un array de strings (te puse la sentencia que sirve para eso). Y despues de cargarlo en el array la cosa ya es trivial, simplemente recorres el array con un bucle en sentido descendente

    For I as Integer = lineas.Length - 1 To 0 Step -1 ...

    Y estando los dats en un array, tambien es sencillo cambiar el sentido si despues quieres ir para abajo, simplemente accedes a la posicion I+1 en el array.

    jueves, 13 de octubre de 2016 8:17

Todas las respuestas

  • ¿Cómo de grande es el fichero? ¿Cabría en memoria? Si es así, simplemente usa la sentencia

    Dim lineas as String() = System.IO.File.ReadAllLines(fichero)

    para cargarlo en un array de strings, y luego usa un bucle en sentido descendente para examinar el array desde la última línea hasta la primera.

    miércoles, 12 de octubre de 2016 18:14
  • Hola Alberto,

    El recorrido lo hago con:

    Dim objReader As New StreamReader, el fichero si que cabe en memoria.

    El problema es que no se como hacer para examinarlo en sentido descendente( de abajo a arriba ). Después de encontrar el dato quiero cambiar el sentido para poder encontrar los NAME:  que hay en cada uno de ellos.

    Saludos!

    Javi

    jueves, 13 de octubre de 2016 6:29
  • El problema es que no se como hacer para examinarlo en sentido descendente

    No puedes. El StreamReader no tiene esa funcionalidad. Por lo tanto, tienes que prescindir del StreamReader y hacerlo de otra manera. Yo te sugeria una forma de hacerlo, que consiste en cargar todo el fichero en un array de strings (te puse la sentencia que sirve para eso). Y despues de cargarlo en el array la cosa ya es trivial, simplemente recorres el array con un bucle en sentido descendente

    For I as Integer = lineas.Length - 1 To 0 Step -1 ...

    Y estando los dats en un array, tambien es sencillo cambiar el sentido si despues quieres ir para abajo, simplemente accedes a la posicion I+1 en el array.

    jueves, 13 de octubre de 2016 8:17
  • Con razón no podía.....

    Voy a hacerte caso y miraré de cargarlo todo en un array.

    Gracias Alberto.

    Javi.

    jueves, 13 de octubre de 2016 10:40