Ejercicio
ArrayList - Lector de archivos de texto
Objetivo
Entregue aquí su lector básico de archivos de texto.
Este lector de archivos de texto siempre muestra 21 líneas del archivo de texto, y el usuario podría usar la tecla up para mostrar la línea anterior, la tecla down para mostrar la siguiente línea y la tecla ESC para salir.
Sugerencias:
El lector de archivos de texto debe tener 3 métodos:
- ReadFile (Leer el archivo de texto y almacenarlo en la memoria)
- ShowMenu (Borrar la consola y preparar la línea superior y la línea inferior [raw 23] de la consola, cambiando los colores usando Console.BackgroundColor, Console.ForegroundColor, ConsoleColor y Console.SetCursorPosition(column, raw). Una vez preparado el menú, recuerda colocar el cursor en el segundo raw).
- ShowFrom (escribir 21 líneas, considerando la posición de la primera línea a escribir)
La lógica del programa principal debe ser como: ShowMenu, ShowFrom, ReadKey, ShowMenu, ShowFrom, ReadKey....
Código
using System;
using System.IO;
using System.Collections;
namespace LectorTexto
{
class Program
{
static ArrayList lista = new ArrayList();
static bool fin;
static int lineaDesde = 0, lineaHasta = 21;
static void Main(string[] args)
{
Console.Write("Introduce nombre archivo: ");
string nombreArchivo = Console.ReadLine();
LeerFichero(nombreArchivo);
do
{
MostrarMenu();
EscribirLineas(lineaDesde, lineaHasta);
LeerTecla();
}
while (!fin);
}
static void LeerTecla()
{
ConsoleKeyInfo cki;
cki = Console.ReadKey();
if (cki.Key == ConsoleKey.Escape)
{
fin = true;
}
else if (cki.Key == ConsoleKey.UpArrow)
{
if (lineaDesde > 0)
{
lineaDesde--;
lineaHasta--;
}
}
else if (cki.Key == ConsoleKey.DownArrow)
{
if (lineaHasta < lista.Count)
{
lineaDesde++;
lineaHasta++;
}
}
else if (cki.Key == ConsoleKey.PageUp)
{
if ((lineaHasta + 21) < lista.Count)
{
lineaDesde += 21;
lineaHasta += 21;
}
else
{
lineaDesde += lista.Count - lineaHasta;
lineaHasta += lista.Count - lineaHasta;
}
}
else if (cki.Key == ConsoleKey.PageDown)
{
if ((lineaDesde - 21) > 0)
{
lineaDesde -= 21;
lineaHasta -= 21;
}
else
{
lineaHasta = lineaDesde + (21 - lineaDesde);
lineaDesde = 0;
}
}
}
static void EscribirLineas(int desde, int hasta)
{
for (int i = desde; i < hasta; i++)
{
Console.WriteLine(lista[i]);
}
}
static void MostrarMenu()
{
Console.Clear();
Console.BackgroundColor = ConsoleColor.Cyan;
Console.ForegroundColor = ConsoleColor.Black;
Console.WriteLine(" ==> Lector .txt --- Version 1.0");
Console.SetCursorPosition(0, 23);
Console.BackgroundColor = ConsoleColor.Cyan;
Console.ForegroundColor = ConsoleColor.Black;
Console.WriteLine("Pulse ESC para salir, fecha arriba y abajo para mover");
Console.SetCursorPosition(0, 1);
Console.BackgroundColor = ConsoleColor.Black;
Console.ForegroundColor = ConsoleColor.White;
}
static void LeerFichero(string nombreArchivo)
{
if (!File.Exists(nombreArchivo))
{
Console.WriteLine("El fichero de texto no existe");
}
else
{
try
{
StreamReader archivoTexto = File.OpenText(nombreArchivo);
string line;
do
{
line = archivoTexto.ReadLine();
if (line != null)
lista.Add(line);
}
while (line != null);
archivoTexto.Close();
}
catch (Exception e)
{
Console.WriteLine("Error, " + e.Message);
}
}
}
}
}