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
Imports System
Imports System.IO
Imports System.Collections
Namespace LectorTexto
Class Program
Shared lista As ArrayList = New ArrayList()
Shared fin As Boolean
Shared lineaDesde As Integer = 0, lineaHasta As Integer = 21
Private Shared Sub Main(ByVal args As String())
Console.Write("Introduce nombre archivo: ")
Dim nombreArchivo As String = Console.ReadLine()
LeerFichero(nombreArchivo)
Do
MostrarMenu()
EscribirLineas(lineaDesde, lineaHasta)
LeerTecla()
Loop While Not fin
End Sub
Private Shared Sub LeerTecla()
Dim cki As ConsoleKeyInfo
cki = Console.ReadKey()
If cki.Key = ConsoleKey.Escape Then
fin = True
ElseIf cki.Key = ConsoleKey.UpArrow Then
If lineaDesde > 0 Then
lineaDesde -= 1
lineaHasta -= 1
End If
ElseIf cki.Key = ConsoleKey.DownArrow Then
If lineaHasta < lista.Count Then
lineaDesde += 1
lineaHasta += 1
End If
ElseIf cki.Key = ConsoleKey.PageUp Then
If (lineaHasta + 21) < lista.Count Then
lineaDesde += 21
lineaHasta += 21
Else
lineaDesde += lista.Count - lineaHasta
lineaHasta += lista.Count - lineaHasta
End If
ElseIf cki.Key = ConsoleKey.PageDown Then
If (lineaDesde - 21) > 0 Then
lineaDesde -= 21
lineaHasta -= 21
Else
lineaHasta = lineaDesde + (21 - lineaDesde)
lineaDesde = 0
End If
End If
End Sub
Private Shared Sub EscribirLineas(ByVal desde As Integer, ByVal hasta As Integer)
For i As Integer = desde To hasta - 1
Console.WriteLine(lista(i))
Next
End Sub
Private Shared Sub 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
End Sub
Private Shared Sub LeerFichero(ByVal nombreArchivo As String)
If Not File.Exists(nombreArchivo) Then
Console.WriteLine("El fichero de texto no existe")
Else
Try
Dim archivoTexto As StreamReader = File.OpenText(nombreArchivo)
Dim line As String
Do
line = archivoTexto.ReadLine()
If line IsNot Nothing Then lista.Add(line)
Loop While line IsNot Nothing
archivoTexto.Close()
Catch e As Exception
Console.WriteLine("Error, " & e.Message)
End Try
End If
End Sub
End Class
End Namespace