Ejemplo para leer un archivo de texto utilizando Line Input
Lo siguiente, lee un archivo de texto línea por línea, y carga el contenido en un control ListBox. colocar un control List1, un Command1 y un Text1 para indicar el path del archivo a leer:
Option Explicit Private Sub Command1_Click() On Error GoTo errSub Dim n_File As Integer Dim Linea As String 'Elimina el contenido del listbox List1.Clear 'Número de archivo libre n_File = FreeFile 'Abre el archivo para leer los datos Open text1.Text For Input As n_File 'Recorre linea a linea el mismo y añade las lineas al control List Do While Not EOF(n_File) 'Lee la linea Line Input #n_File, Linea List1.AddItem Linea Loop Exit Sub errSub: 'error MsgBox "Número de error: " & Err.Number & vbNewLine & _ "Descripción del error: " & Err.Description, vbCritical End Sub Private Sub Form_Load() Command1.Caption = " Cargar en Listbox " End Sub
Este otro ejemplo, lo que hace es leer un archivo de texto para contar las líneas del mismo
Colocar un command1 en el formulario y pegar el siguiente código fuente
Public Function Contar_Lineas(ByVal strTextFile As String) As Long Dim F As Integer Dim Lineas As Long Dim str_Linea As String ' Número de archivo libre F = FreeFile ' Abre el archivo de texto Open strTextFile For Input As #F 'Recorre todo el archivo de texto _ linea por linea hasta el final Do 'Lee una línea Line Input #F, str_Linea ' Incrementa la cantidad de lineas leidas Lineas = Lineas + 1 ' Leerá hasta que llegue al fin de archivo Loop While Not EOF(F) ' Cierra el archivo de texto abierto Close #F ' Retorna a la función el número de lineas del fichero Contar_Lineas = Lineas End Function Private Sub Command1_Click() Dim Path As String Path = InputBox(" Ingrese la ruta de un archivo de texto ", _ " Contar líneas ") If Path = vbNullString Then Exit Sub MsgBox " Cantidad de lineas: " & Contar_Lineas(Path) End Sub
7 - Leer el contenido de un archivo de texto con la función Input
La función input, a diferencia de Line Input que Lee por línea, Input lee todo el contenido del archivo de una sola ves, es decir no necesitamos, como en el ejemplo anterior, utilizar un bucle.
El modo de usarlo es el siguiente:
Primero se abre el archivo con Open, por ejemplo:
Open Path_Archivo For Input As #1
Luego se asigna a una variable, el contenido que devolverá la función Input:
Contenido = Input(LOF(1), #1)
Un ejemplo:
Lo siguiente lee el contenido de un archivo txt y lo carga en un textBox multilínea
Colocar un TextBox llamado txt_Path ( para especificar la ruta del archivo ).
El Textbox que mostrará los datos del fichero, colocarle el nombre txt_Contenido
Código en un botón:
On Error GoTo Err_Sub Dim n_File As Integer Dim Contenido As String 'Número de archivo libre n_File = FreeFile 'Abre el archivo indicado Open txt_Path For Input As n_File 'Lee todo los datos del archivo y lo almacena en la variable Contenido = Input$(LOF(n_File), #n_File) 'Cierra el archivo abierto Close n_File 'Carga el contenido de la variable en el TextBox txt_Contenido = Contenido Exit Sub Err_Sub: MsgBox Err.Description, vbCritical
Escribir datos en archivos de texto
Para escribir datos en archivos de texto se utiliza la sentencia Print y Write.
Ejemplo:
Dim nombre As String Dim edad As Integer Dim telefono As String
Open "c:\miarchivo.txt" For Append As #1
Print #1, "esta es una línea"
Print #1, "esta es otra línea"
Print #1, nombre, edad, telefono
Close #1
En este ejemplo agregamos datos a un archivo existente llamado miArchivo.txt con la sentencia Print.
Primero abrimos el archivo con Open. luego la sentencia Print lleva 2 parámetros. el primero indica el archivo que estamos manipulando (el archivo n°1, dentro del código), el segundo parámetro indica los datos que se agregarán en el mismo. En el segundo parámetro podemos poner un dato directamente (una cadena, número, etc...),, por último cerramos el archivo.
Escribir datos con la sentencia Write
A diferencia de Print, la sentencia Write escribe datos en un archivo separados por comas.
Ejemplo:
Dim nombre As String Dim apellido As String
apellido = "Peres"
nombre = "Carlos"
Open App.Path & "\Archivo.txt" For Output As #1
Write #1, nombre, apellido
Close #1
Como podemos ver la sentencia Write escribe los datos en el archivo separados por coma. En la primera línea escribirá el contenido de las variables nombre y apellido . También se pueden pasar los datos directamente a Write sin usar variables, por ejemplo:
Write #1, "Un dato", "Otro dato", "Otro mas"
Nota importante: cuando escribimos datos con la sentencia Print se utiliza la sentencia Line Input para leer los datos del archivo. En cambio cuando escribimos datos separados por comas con la sentencia Write debemos utilizar la sencia Input
Para que esta página no sea tan extensa, he armado 10 ejercicios que utilizan todo lo visto hasta aquí, o sea el tema relacionado a los archivos secuenciales. Dentro del código se encuentra detallado cada paso y lo podés descargar al final de esta página.
9 - Archivos aleatorios o directos
A diferencia de los archivos secuenciales, los archivos aleatorios almacenan datos en forma de registros. Como habíamos dicho en el capítulo anterior para leer datos de un archivo secuencial había que leer todo el archivo, es decir que no podíamos leer por ejemplo los datos que estuviesen en la línea 35 del mismo sin antes pasar por todos los datos anteriores, por eso su nombre de archivo secuencial.
En cambio los archivos aleatorios, también llamados archivos directos, almacenan los datos con una estructura diferente. Los datos se guardan en registros mediante una estructura definida de tipo Type (estructura definida por nosotros) también llamada UDT
Por ejemplo si tuviesemos 25 registros, cada uno con datos (apellido, email, telefono,etc..), y quisiera acceder al registro 17, puedo leer los datos del registro 17 sin tener que leer los 16 registros anteriores, ganando con ello mas velocidad y teniendo una estructura de datos definida.
Para abrir un archivo aleatorio para trabajar con él, se utiliza la sentencia Open con algunos cambios en lo que se refiere a los archivos secuenciales
Ejemplo:
open "elarchivo.dat" for random as #1 len = len(mivariable)
Como podemos ver para abrir un archivo de acceso aleatorio se utiliza la palabra Random (aleatorio). Luego debemos indicar el número de archivo para identificarlo, y por último una opción nueva : Len.
cada registro en el archivo, que es una estructura de datos Type, tiene que tener una longitud fija. Mediante la función Len de visual Basic debemos indicar el tamaño de la estructura de datos que vamos a utilizar. para que quede mas claro un ejemplo:
Primero definimos una estructura de datos:
Private Type t_clientes
nombre As String * 20
apellido As String * 15
dirección As String * 30
edad As Integer
End Type
Después creamos una variable llamada clientes de tipo t_clientes
Dim clientes As t_clientes
ahora abrimos nuestro archivo, y en el parámetro de la función Len le pasamos la variable para que visual basic calcule el tamaño de la estructura t_clientes
Open "datos.dat" For Random As #1 Len = Len(clientes)
La estructura de datos debe tener un tamaño fijo, no datos variables como en el caso de los archivos secuenciales, de ahí que se indicara en el Type en las variables mediante el asterisco en el caso de los String.
En cada campo de la estructura de datos debemos indicar el tamaño de la variable. En el caso del campo nombre de tipo string le hemos asignado una longitud fija de 20 bytes, en el apellido 15 y en la dirección 30 bytes. La variable o el campo edad que es de tipo integer, no debemos indicar el tamaño de la variable, ya que sabemos que un número integer ocupa 2 bytes.
En total esta estructura t_clientes tiene una longitud de 67 bytes (30 + 20 + 15 + 2 ).
Si no indicáramos en la sentencia Open el tamaño de la estructura, visual basic, por defecto asumiría la estructura de un tamaño de 128 bytes, y si nuestra estructura tendría mayor tamaño ocurriría un error en tiempo de ejecución, por lo cual siempre debemos utilizar la función len para calcular el tamaño de la misma.