Exercise
ArrayList - Text file reader
Objetive
provide your basic text file reader here, which displays 21 lines of text and allows the user to navigate using the up and down arrow keys, and exit using the ESC key.
Hints:
The text file reader should have three methods:
ReadFile (reads the text file and stores it in memory)
ShowMenu (clears the console, sets the top and bottom lines of the console [row 23], changes colors using Console.BackgroundColor, Console.ForegroundColor, ConsoleColor and Console.SetCursorPosition(column, row). Once the menu is prepared, remember to set the cursor in the second row).
ShowFrom (writes 21 lines, considering the position of the first line to write)
The main program logic should be as follows: ShowMenu, ShowFrom, ReadKey, ShowMenu, ShowFrom, ReadKey....
Code
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