Resumen: Entrega nº34 del curso Aprender a programar en Visual Basic desde cero.
Codificación aprenderaprogramar.com: CU00335A

 

 

El objetivo de estos ejercicios es aplicar conocimientos sobre "Herramientas básicas para la programación" a un lenguaje como es Visual Basic. Para su realización debemos tener conocimientos básicos sobre algoritmia, uso de bucles o estructuras iterativas y apertura y cierre de archivos. Usaremos conceptos como bucles Do While y EOF ó Is Nothing para leer datos desde archivos.

 

Visual Basic
 

 

FINAL DE ARCHIVO CON VISUAL BASIC. EJEMPLO.

En muchos casos no sabemos el número de datos que existen en un archivo y necesitaremos ir extrayendo datos hasta llegar al final del archivo. Para ello vamos a proponer dos opciones:

a) Para versiones menos recientes de Visual Basic usaremos EOF (End Of File). EOF es un parámetro booleano útil para facilitar el cierre de bucles de extracción de datos desde archivo. En Visual Basic EOF es una función que al ser invocada devuelve un valor tipo Integer/Booleano que es 0 (False) mientras extraemos datos que existen desde un archivo y -1 (True) al llegar al final del archivo.

Si se trata de extraer mayor número de datos del que existen en un archivo aparece el error "La entrada de datos ha sobrepasado el final del archivo". Para evitarlo utilizaremos la función EOF con cualquiera de estas sintaxis:

 

  Do While Not EOF(Canal)    

 

  Do While EOF(Canal) = False    

 

b) Para versiones más recientes de Visual Basic iremos extrayendo datos hasta que al llegar al final de archivo se produzca que la extracción toma el valor predefinido de Visual Basic “Is Nothing” = true. “Is Nothing” es un indicador booleano de que un valor extraído es vacío o sin contenido. Mientras existen datos en el archivo y se van extrayendo Is Nothing valdrá false. Cuando se llegue al final de archivo Is Nothing tomará valor true. La sintaxis será:

Do While extraccion Is Nothing = False

 

 

Donde extraccion simboliza un nombre de variable donde estamos extrayendo los datos leídos desde el archivo.

Consideremos un archivo libros.dat creado previamente donde tenemos 10 datos numéricos.

leer archivos visual basic

 

 

La extracción de datos hasta llegar a final de archivo se haría de la siguiente manera:

Código (versiones VB menos recientes) Código (versiones VB más recientes)

‘Curso VB aprenderaprogramar.com           
Option Explicit

Dim i%, Canal As Integer
Dim Dato(50) as Single

Private Sub Form_Load()
Show
LabelResultado = "Datos extraidos de archivo: "
Canal = FreeFile
Open "C:\libros.dat" For Input As Canal

Do While EOF(Canal) = False
    i = i + 1
    Input #Canal, Dato(i)
    LabelResultado = LabelResultado & Dato(i) & " , "
Loop
Close
End Sub
REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On
Public Class Form1
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim i As Integer
Dim Dato(50) As Single
Dim lineaExtraida As String
LabelResultado.Text = "Datos extraidos de archivo: "
Dim myFileToRead As New System.IO.StreamReader("C:\Users\Toshiba\Desktop\libros.dat", False)
 lineaExtraida = myFileToRead.ReadLine()
 Do While lineaExtraida Is Nothing = False
     Dato(i) = lineaExtraida
     LabelResultado.Text = LabelResultado.Text & Dato(i) & " , "
     i = i + 1
     lineaExtraida = myFileToRead.ReadLine()
 Loop
 myFileToRead.Close()
End Sub
End Class

 

 

EJERCICIO USO DE FINAL DE ARCHIVO

Resolver este problema:

En un fichero tenemos las notas de un grupo de alumnos de una clase en un array Nota(1), Nota(2), …, Nota(n), establecidas entre 0 y 10. Se desea desarrollar un programa que determine la nota media extrayendo todos los datos existentes hasta llegar al final de archivo.

 

Nota: Considerar que el número de datos es igual o inferior a 50.

Vamos a considerar que el archivo con los datos es notas.dat y que contiene los 35 valores siguientes cada uno en una línea (aquí los escribimos separados por guiones para no ocupar 35 líneas):

6 – 7 – 8 – 5 – 6 – 4 – 7 – 8 – 7 – 10 – 0 – 5 – 6 – 7 – 6 – 5 – 0 – 7 – 8 – 10 – 2 – 3 – 4 – 5 – 6 – – 7 – 6 – 5 – 4 – 10 – 4 – 3 – 2 – 3 – 4

Necesitamos conocer la ruta donde está ubicado el archivo e indicarla correctamente.

 

 

SOLUCIÓN

Código (versiones VB menos recientes) Código (versiones VB más recientes)

'Curso VB aprenderaprogramar.com

'[Media con Fin de Archivo]

Option Explicit
Dim i%, Canal As Integer
Dim Nota(50) As Single
Dim Media!, Suma As Single

Private Sub Form_Load()                                  
Show
Form1.Caption = "Media con lectura hasta fin de archivo"
Canal = FreeFile
Open "C:\notas.dat" For Input As Canal
Do While EOF(Canal) = False
    i = i + 1
    Input #Canal, Nota(i)
    Suma = Suma + Nota(i)
Loop
Close
Media = Suma / i
LabelResultado.Alignment = 2
LabelResultado.FontBold = True
LabelResultado = "La nota media de la clase es " & Media
End Sub
REM Curso Visual Basic aprenderaprogramar.com
Option Explicit On
Public Class Form1

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim i As Integer
        Dim Nota(50) As Single
        Dim lineaExtraida As String
        Dim Media, Suma As Single

Me.Text = "Media con lectura datos hasta fin de archivo"
Dim myFileToRead As New System.IO.StreamReader("C:\Users\Toshiba\Desktop\notas.dat", False)

        lineaExtraida = myFileToRead.ReadLine()
        Do While lineaExtraida Is Nothing = False
            i = i + 1
            Nota(i) = lineaExtraida
            Suma = Suma + Nota(i)
            lineaExtraida = myFileToRead.ReadLine()
        Loop
        myFileToRead.Close()
        Media = Suma / i
LabelResultado.TextAlign = ContentAlignment.MiddleCenter
LabelResultado.Font = New Font("Arial", 10, FontStyle.Bold)
LabelResultado.Text = "La nota media de la clase es " & Media
    End Sub
End Class

 

 

El resultado del programa:

visual basic formulario

 

 

 

 

 

 

Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link:  Ver curso completo.
 
Para  hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.

Descargar archivo: