ArrayList - Text file reader Learn programming Visual Basic (VB.net)

Lesson:

Dynamic Memory Management


Exercise:

ArrayList - Text file reader 14


Objetive:

Deliver here your basic text file reader.

This text file reader always shows 21 lines of the text file, and the user could use up key to show the previous line, down key to show the next line, and ESC key to exit.

Hints:
The text file reader should have 3 methods:
- ReadFile (Read the text file and store it in memory)
- ShowMenu (Clear the console and prepare the top line and the bottom line [raw 23] of the console, changing colours using Console.BackgroundColor, Console.ForegroundColor, ConsoleColor and Console.SetCursorPosition(column, raw). Once the menu is prepared, remember to set the cursor in the second raw).
- ShowFrom (write 21 lines, considering the position of the first line to write)
The logic of the main program should be like: 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