ArrayList - Lector de archivos de texto Aprende programación con ejercicios Visual Basic (VB.net)

Lección:

Gestión Dinámica de Memoria


Ejercicio:

ArrayList - Lector de archivos de texto 61


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