Leer una determinada linea de un documento de texto

31/12/2006 - 09:58 por Jano | Informe spam
Buenas, estoy intentando hacer un programa que lea una determinada linea de
un documento de texto y no lo consiguo.
Con Syste.IO StreamReader, etc... solo consigo o que lea todo y no puedo
seleccionar la linea.
Alguien tiene alguna idea?.
Muchas gracias.
 

Leer las respuestas

#1 Octavio Hernandez
31/12/2006 - 14:16 | Informe spam
Jano

En general, las clases para el tratamiento de ficheros de texto solo
permiten el acceso secuencial;
es decir - si necesitas la línea 50, debes hacer un bucle que recorra las
primeras 50 líneas. Esto
es así porque cada línea puede tener un tamaño diferente (el fin de cada
línea se determina por la
presencia de un carácter o secuencia especial), y en principio el sistema no
puede calcular en qué
posición del fichero está cada línea.

Hay varias cosas que puedes hacer:
a) Si los ficheros texto son generados por tu propio programa, haz que todas
las líneas tengan la
misma longitud completando cada una con espacios al final. Eso te permitirá
utilizar un lector binario
y posicionarte directamente para leer en el lugar donde empieza la línea que
te interesa.

posición = línea * longitud de cada línea

b) Leer todo el contenido del fichero a memoria mediante ReadToEnd(), y
luego aplicar algoritmos
de búsqueda sobre ese contenido, por ejemplo, utilizando expresiones
regulares.

c) Leer todo el contenido del fichero línea a línea e ir construyendo una
tabla de pares (nº línea, línea)
para luego poder localizar rápidamente cualquier línea.

Estos dos últimos son útiles solo si vas a necesitar localizar repetidamente
líneas de un mismo fichero.
Si solo necesitas hacerlo una vez - simplemente haz una lectura secuencial y
ya está.

Salu2 - Octavio


"Jano" escribió en el mensaje
news:
Buenas, estoy intentando hacer un programa que lea una determinada linea
de
un documento de texto y no lo consiguo.
Con Syste.IO StreamReader, etc... solo consigo o que lea todo y no puedo
seleccionar la linea.
Alguien tiene alguna idea?.
Muchas gracias.

Preguntas similares