Leer un fichero de texto y asignarlo a un ComboBox, ListBox y ListView

 
Publicado el 17/Abr/2007
Actualizado el 17/Abr/2007
Autor: Guillermo 'guille' Som

En este ejemplo, se lee el contenido de un fichero de texto línea a línea y se asigna a los elementos de un ListBox, un ComboBox y un ListView, es decir, controles que tienen la propiedad Items. Las líneas en blanco no se asignan.

 

 

Introducción:

Creo que el título y la descripción lo dicen todo.

En este ejemplo se abre un fichero de texto, se va leyendo cada línea, y si no está en blanco, se asigna a tres controles de prueba, uno es un ListBox, otro es un ComboBox y el tercero es un ListView.

Al abrir el fichero, usando un StreamReader, se abre con el formato predeterminado de Windows (Encoding.Default), pero se pasa un valor True al tercer parámetro, por si la codificación es diferente.

El código es bien sencillo, se abre el fichero, se lee cada línea con el método ReadLine, se comprueba si no está vacío lo que se ha leído, y en caso de que haya algo en esa línea, se asigna a la propiedad Items del control en cuestión.

Te muestro el código para Visual Basic y para C#. En estos ejemplos, la versión usada es la 2005, ya que se usa el método IsNullOrEmpty de la clase String para comprobar si una cadena está vacía y en el caso de Visual Basic, se usa Continue While para saltar a la siguiente línea del fichero.

En el caso del ComboBox, al final se comprueba si tiene elementos, y en caso de que si tenga, se muestra el primero asignando un valor cero (el primer elemento siempre es el de índice cero) a la propiedad SelectedIndex.

Este es el aspecto del formulario en tiempo de diseño:

Figura 1. El formulario en tiempo de diseño
Figura 1. El formulario en tiempo de diseño

 

Espero que te sea de utilidad.

Nos vemos.
Guillermo

P.S.
Más a bajo tienes el código completo para Visual Basic 2005 y para Visual C# 2005, así como un ZIP con los dos proyectos.

 


Código para Visual Basic.NET (VB.NET) El código para Visual Basic 2005
'------------------------------------------------------------------------------
' Leer el contenido de un fichero de texto y asignarlo              (17/Abr/07)
' a un ComboBox, un ListBox y un ListView
'
' ©Guillermo 'guille' Som, 2007
'------------------------------------------------------------------------------
Option Strict On

Imports Microsoft.VisualBasic
Imports System
Imports System.Windows.Forms
Imports System.Drawing

Public Class Form1

    Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) _
                Handles MyBase.Load
        Me.txtFichero.Text = "E:\tmp\prueba.txt"
    End Sub

    Private Sub btnExaminar_Click(ByVal sender As Object, ByVal e As EventArgs) _
                Handles btnExaminar.Click
        Dim oFD As New OpenFileDialog
        With oFD
            .Title = "Seleccionar fichero"
            .Filter = "Ficheros de texto (*.txt;*.ini)|*.txt;*.ini" & _
                      "|Todos los ficheros (*.*)|*.*"
            .FileName = Me.txtFichero.Text
            If .ShowDialog = System.Windows.Forms.DialogResult.OK Then
                Me.txtFichero.Text = .FileName
            End If
        End With
    End Sub

    Private Sub btnLeer_Click(ByVal sender As Object, ByVal e As EventArgs) _
                Handles btnLeer.Click
        ' Leer el contenido y asignar cada línea a los controles
        ' Comprobar que existe
        If System.IO.File.Exists(Me.txtFichero.Text) = False Then
            MessageBox.Show("Debes indicar un fichero que exista", _
                        "Leer fichero", _
                        MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            Exit Sub
        End If

        ' Borrar el contenido previo de los controles
        Me.listBoxContenido.Items.Clear()
        Me.comboBoxContenido.Items.Clear()
        Me.listViewContenido.Items.Clear()

        ' Leer el fichero usando la codificación de Windows
        ' pero pudiendo usar la marca de tipo de fichero (BOM)
        Dim sr As New System.IO.StreamReader( _
                    Me.txtFichero.Text, _
                    System.Text.Encoding.Default, _
                    True)

        ' Leer el contenido mientras no se llegue al final
        While sr.Peek() <> -1
            ' Leer una líena del fichero
            Dim s As String = sr.ReadLine()
            ' Si no está vacía, añadirla al control
            ' Si está vacía, continuar el bucle
            If String.IsNullOrEmpty(s) Then
                Continue While
            End If

            Me.listBoxContenido.Items.Add(s)
            Me.comboBoxContenido.Items.Add(s)
            Me.listViewContenido.Items.Add(s)
        End While
        ' Cerrar el fichero
        sr.Close()

        ' Si el combo tiene algo, seleccionar el primero
        If Me.comboBoxContenido.Items.Count > 0 Then
            Me.comboBoxContenido.SelectedIndex = 0
        End If
    End Sub
End Class

 

Código para C Sharp (C#) El código para Visual C# 2005
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }
    private void Form1_Load(object sender, EventArgs e)
    {
        this.txtFichero.Text = @"E:\tmp\prueba.txt";
    }

    private void btnExaminar_Click(object sender, EventArgs e)
    {
        OpenFileDialog oFD = new OpenFileDialog();
        oFD.Title = "Seleccionar fichero";
        oFD.Filter = "Ficheros de texto (*.txt;*.ini)|*.txt;*.ini" +
                     "|Todos los ficheros (*.*)|*.*";
        oFD.FileName = this.txtFichero.Text;
        if (oFD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
        {
            this.txtFichero.Text = oFD.FileName;
        }
    }

    private void btnLeer_Click(object sender, EventArgs e)
    {
        // Leer el contenido y asignar cada línea a los controles
        // Comprobar que existe
        if (System.IO.File.Exists(this.txtFichero.Text) == false)
        {
            MessageBox.Show("Debes indicar un fichero que exista",
                "Leer fichero",
                MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            return;
        }

        // Borrar el contenido previo de los controles
        this.listBoxContenido.Items.Clear();
        this.comboBoxContenido.Items.Clear();
        this.listViewContenido.Items.Clear();

        // Leer el fichero usando la codificación de Windows
        // pero pudiendo usar la marca de tipo de fichero (BOM)
        System.IO.StreamReader sr =
            new System.IO.StreamReader(
                    this.txtFichero.Text,
                    System.Text.Encoding.Default,
                    true);

        // Leer el contenido mientras no se llegue al final
        while (sr.Peek() != -1)
        {
            // Leer una líena del fichero
            string s = sr.ReadLine();
            // Si no está vacía, añadirla al control
            // Si está vacía, continuar el bucle
            if (String.IsNullOrEmpty(s))
            {
                continue;
            }

            this.listBoxContenido.Items.Add(s);
            this.comboBoxContenido.Items.Add(s);
            this.listViewContenido.Items.Add(s);
        }
        // Cerrar el fichero
        sr.Close();

        // Si el combo tiene algo, seleccionar el primero
        if (this.comboBoxContenido.Items.Count > 0)
        {
            this.comboBoxContenido.SelectedIndex = 0;
        }
    }
}

Espacios de nombres usados en el código de este artículo:

System.Windows.Forms
System.IO
System.Text
 


Código de ejemplo (comprimido):

Fichero con el código de ejemplo: LeerFicheroTexto_asignarloControl.zip - 23.8 KB

Contiene los proyectos para Visual Basic 2005 y Visual C# 2005.

(MD5 checksum: 884FCA70860510569369DA8073D7F54F)


Ir al índice principal de el Guille

Valid XHTML 1.0 Transitional ¡CSS Válido!