Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arreglos
Arreglos
mx
Arreglos
Los Arreglos se utilizan para almacenar un conjunto de variables, que sean del mismo tipo de dato, y todas estas bajo un mismo nombre. Por ejemplo imaginemos que tenemos 20 variables de tipo String que almacenan nombres (nombre1, nombre2, etc..). si se quisiera pasar todas estas cadenas a minsculas tendra que utilizar la funcin Lcase con cada variable: nombre1 = Lcase(nombre1), nombre2 = Lcase(nombre2), etc.. En cambio si utilizara un arreglo la solucin seria:
Dim nombres(30) As String For x = 0 To 30 nombres(x) = LCase(nombres(x)) Next
Las matrices
Como se dijo anteriormente, las matrices son arreglos de mas de 1 dimensin (2 o mas), a diferencia de los vectores que poseen una sola dimensin. Podemos imaginar una matriz bidimensional ( 2 dimensiones) , como una cuadrcula con filas y columnas, donde las filas representaran las coordenadas x y las columnas las coordenadas y. A una matriz de 3 dimensiones o tridimensional se la puede imaginar con las coordenadas x, y, z, y esta es ideal para representar figuras en el espacio por ejemplo. Las matrices se declaran en el cdigo de manera igual que los vectores, con la diferencia que debemos indicar mas subndices de acuerdo a la cantidad de dimensiones que posea la matriz. por lo general no se suele utilizar matrices de mas de 3 dimensiones..
En este ejemplo creamos una matriz de 3 dimensiones de 3 x 3 x 3 Dim cubo (1 to 3, 1 to 3, 1 to 3) as integer para acceder a los datos sera exactamente de la misma manera pero debemos utilizar un ndice mas.
Ejemplo: cubo (1, 1 , 1) = 50 cubo (1, 1 , 2) = 50 cubo (1, 1 , 3) = 50 cubo (1, 2 , 1) = 50 cubo (1, 2 , 2) = 50 cubo (1, 2 , 3) = 50 cubo (1, 3 , 1) = 50 cubo (1, 3 , 2) = 50 cubo (1, 3 , 3) = 50 cubo (2, 1 , 1) = 50 cubo (2, 1 , 2) = 50 cubo (2, 1 , 3) = 50 cubo (2, 2 , 1) = 50 cubo (2, 2 , 2) = 50 cubo (2, 2 , 3) = 50 cubo (2, 3 , 1) = 50 cubo (2, 3 , 2) = 50 cubo (2, 3 , 3) = 50 cubo (3, 1 , 1) = 50 cubo (3, 1 , 2) = 50 cubo (3, 1 , 3) = 50 cubo (3, 2 , 1) = 50 cubo (3, 2 , 2) = 50 cubo (3, 2 , 3) = 50 cubo (3, 3 , 1) = 50 cubo (3, 3 , 2) = 50 cubo (3, 3 , 3) = 50
En el ejemplo anterior, que es un poco extenso, es para que veas todos los posibles valores que puedes almacenar en una matriz de 3 x 3 x 3, y que da como resultado un arreglo de 27 valores posibles.
Vectores dinmicos
Hasta ahora habamos visto solo vectores o arreglos de tamao fijo, pero qu pasa cuando no sabemos el tamao o el largo de un vector y queremos que sea variable ?. Visual basic posee una sentencia o funcin que nos permite cambiar el largo de un vector en tiempo de ejecucin, dndonos as mas flexibilidad, y de esta manera no desperdiciar memoria y recursos de la pc creando vectores mas largos de lo que realmente necesitamos. Esta funcin se llama ReDim y ReDim Preserve
Funcin Join
Esta funcin se utiliza para unir en una sola variable el conjunto de subcadenas de un vector. Esta funcin tiene solo 2 parmetros y es muy fcil de usar. Ejemplo: Dim micadena as string Dim vector(1 To 3) As String vector(1) = "Carlos" vector(2) = "Pedro" vector(3) = "Juan" Ahora ejecutando Join, la variable micadena pasara a valer "Carlos-PedroJuan" micadena = join (vector, "-") Nota: En el primer parmetro de la funcin debemos indicar el vector en el cual trabajar, y en el segundo se debe indicar un delimitador de caracter para separar las cadenas. Si no especificamos ninguno, visual basic utilizar por defecto un espacio vaco o en blanco (" ") para separar cada subcadena
Funcin Split:
Esta funcin hace el trabajo inverso de la funcin Join. Split se utiliza para rellenar un vector dinmico que contiene un nmero de subcadenas a partir de una cadena que le pasamos como parmetro a la funcin. Para aclarar un poco un ejemplo Private Sub Form_Load()
'Una variable para almacenar una cadena Dim Micadena As String 'Vector dinmico Dim Vector() As String 'Le damos un valor a la variable Micadena = "maria/natalia/romina" 'Ejecutamos la funcin Split Vector = Split(Micadena, "/") 'Ahora el vector dinmico pasara a _ contener los siguientes valores: Vector(0) = "mara" Vector(1) = "natalia" Vector(2) = "Romina"
End Sub Nota: una cosa importante es que en el vector anterior no se ha declarado un rango , ya que la funcin devuelve un vector cuya cantidad de elementos se ignora, es decir no se conoce.
Funcin Filter :
La funcin Filter se utiliza para filtrar subcadenas de un vector dependiendo de un determinado criterio de bsqueda. Los parmetros que lleva la funcin son los siguientes: Filter (vector donde buscar, cadena a buscar, valor booleano que indica si incluir o excluir la cadena) Ejemplo: ' Vector Dim Alumnos(1 To 4) As String ' Vector dinmico para almacenar el resultado Dim Resultado() As String Alumnos(1) = "Luciano" Alumnos(2) = "Lucas" Alumnos(3) = "juan" Alumnos(4) = "Natalia" ' Ejecutamos Filter Resultado = Filter(Alumnos, "Lu", True) ' Ahora el vector dinmico "resultado" pasa a contener MsgBox Resultado(0), vbInformation ' Luciano MsgBox Resultado(1), vbInformation ' Lucas
Funcin Filter :
La funcin Filter se utiliza para filtrar subcadenas de un vector dependiendo de un determinado criterio de bsqueda. Los parmetros que lleva la funcin son los siguientes: Filter (vector donde buscar, cadena a buscar, valor booleano que indica si incluir o excluir la cadena) Ejemplo: ' Vector Dim Alumnos(1 To 4) As String ' Vector dinmico para almacenar el resultado Dim Resultado() As String Alumnos(1) = "Luciano" Alumnos(2) = "Lucas" Alumnos(3) = "juan" Alumnos(4) = "Natalia" ' Ejecutamos Filter Resultado = Filter(Alumnos, "Lu", True) ' Ahora el vector dinmico "resultado" pasa a contener MsgBox Resultado(0), vbInformation ' Luciano MsgBox Resultado(1), vbInformation ' Lucas
Archivos
Archivos En esta seccin se ve un repaso bsico de las tres formas de trabajar con diferentes tipos de archivos en visual basic: Archivos secuenciales, archivos aleatorios y archivos binarios. Por ltimo en el final de la seccin, se describe como utilizar sentencias y funciones propias de visual basic para trabajar con archivos y directorios del sistema operativo, como por ejemplo la sentencia Dir para buscar ficheros, Filecopy para copiar , ChDir, Mkdir para crear carpetas y algunas otras funciones relacionadas.
Sentencia Open
Esta sentencia es la encargada de abrir o crear un archivo, ya sea para leer datos del mismo, sobre escribirlos y/o para agregarle datos. Esta sentencia tiene una serie de parmetros que varan de acuerdo a lo que queramos hacer. Por ejemplo : Open "c:\prueba.txt" For Input As #1 Este ejemplo abre un archivo para poder acceder a los datos que contenga en su interior. cuando decimos abrir, estamos diciendo que se encuentra actualmente abierto y alojado en la memoria ram para poder manipularlo. En el primer parmetro indicamos el path del archivo en el que queremos trabajar. Luego la palabra "As #1" indica el nmero de archivo que estamos utilizando. Este nmero lo asignamos nosotros y va desde el rango 1 al 511. El "nmero de archivo" se utiliza para poder diferenciar al archivo en el cdigo. Cada archivo que se encuentra abierto no se puede asignar un nmero de archivo igual, ya que nos dara un error en tiempo de ejecucin.
Sentencia Close
Una vez que terminamos de trabajar con un archivo que se encuentra abierto y que no lo vamos a utilizar mas, debemos cerrarlo. para ello se utiliza la sentencia Close seguido del nmero de archivo que lo identifica. Por ejemplo: Close #2 Esto cerrar al archivo abierto que anteriormente le asignamos el nmero de archivo 2. Tambin si tengo 3 archivos abiertos podra hacer lo siguiente: Close #1, #2, #3 Si utilizamos la sentencia Close sin ningn parmetro, o mejor dicho ningn nmero de archivo, se cerrarn todos los archivos cargados en memoria por nuestra aplicacin (los que nosotros abrimos con Open).
Sentencia Close
Por lo general, si trabajamos con varios archivos abiertos simultneamente, es aconsejable utilizar la sentencia Close sin ningn parmetro, de este modo cuando termine de ejecutarse el procedimiento se cerrarn todos los archivos abiertos. Hay una funcin en Visual basic llamada FreeFile. Esta funcin lo que hace es darnos un nmero de archivo que est libre y que se pueda usar, para que de este modo no intentamos abrir uno est siendo utilizado, y evitar un error en tiempo de ejecucin. Para usar la funcin es muy fcil, por ejemplo: Dim NumeroArchivo As Integer NumeroArchivo = FreeFile Open "La ruta de un archivo" For Input As #NumeroArchivo
Archivos secuenciales
Los archivos secuenciales se denominan de esta manera por que la forma de escribir y leer los datos en un archivo es, desde el principio hasta el fin del archivo, es decir, si yo quisiera acceder a un determinado dato del archivo y este dato se encuentra en la mitad del archivo, para llegar a ese dato necesito pasar por todos los dems datos, de forma secuencial. Por lo general se suelen utilizar los archivos secuenciales, para trabajar con archivos que contengan una estructura de datos no muy compleja. por que por ejemplo, si utilizramos un archivo para almacenar 50000 nombres con sus respectivos datos (apellido, telfono, direccin etc...) , este mecanismo resultara ineficiente, ya que si quisiera recuperar por ejemplo el registro n 3650, para leer este dato tendra que pasar previamente por los 3649 registros anteriores a este, haciendo mas lento el acceso y por lo tanto desperdiciando recursos del sistema.
Open "c:\nombres.txt" For Input As #1 While Not EOF(1) Line Input #1, mivariable Wend Close #1
En el ejemplo anterior aparece una funcin nueva llamada EOF. Esta funcin significa End Of File o fin de archivo. Cuando abrimos un archivo para leer informacin con Input, debemos saber en que momento llegamos al final del archivo, por que de lo contrario la sentencia Line Input o Input seguira leyendo lneas donde no existen datos despus del fin del archivo, y por lo tanto se producira un error en tiempo de ejecucin por querer leer un dato que no existe.
Lo siguiente, lee un archivo de texto lnea por lnea, 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 'Nmero 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 aade 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 "Nmero de error: " & Err.Number & vbNewLine & _ "Descripcin del error: " & Err.Description, vbCritical End Sub Private Sub Form_Load() Command1.Caption = " Cargar en Listbox " End Sub
La funcin input, a diferencia de Line Input que Lee por lnea, 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 funcin Input: Contenido = Input(LOF(1), #1)
Lo siguiente lee el contenido de un archivo txt y lo carga en un textBox multilnea 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 Cdigo en un botn:
On Error GoTo Err_Sub Dim n_File As Integer Dim Contenido As String 'Nmero 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
ahora abrimos nuestro archivo, y en el parmetro de la funcin Len le pasamos la variable para que visual basic calcule el tamao de la estructura t_clientes
Open "datos.dat" For Random As #1 Len = Len(clientes)
La estructura de datos debe tener un tamao 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.
Si queremos grabar mas datos, por ejemplo en el registro n 2 del archivo hacemos lo siguiente:
empleados.nombre = "Mara" empleados.apellido = "Gonzales" empleados.direccin = "Avenida 13 n 1100" empleados.edad = 35 Put #1, 2, empleados Close #1
como vemos ver la sentencia Put lleva 3 parmetros. El primero indica el numero de archivo abierto en el cual estamos trabajando. en el segundo debemos indicar el nmero de registro en el que se grabarn los datos. Si no ponemos el nmero de registro, los datos se grabarn en el ltimo registro. Por ltimo en el tercer parmetro le pasamos la variable asociada con la estructura de datos.
Funcin Dir
La funcin Dir se utiliza o para buscar archivos y devuelve una cadena que representa el nombre de un archivo o directorio de acuerdo a un determinado patrn de bsqueda. La sintaxis de la funcin es: Dir (ruta, atributos) En el parmetro ruta debemos indicar el path de un archivo, directorio o unidad. Si el path no existe, la funcin Dir devuelve una cadena vaca. En el parmetro atributos podemos especificar los siguientes: vbnormal : cualquier atributo de archivo. vbreadonly : archivos de solo lectura. vbhidden: archivos ocultos vbsystem : archivos de sistema vbvolume : etiqueta de volumen de una unidad vbdirectory : directorios
Funcin Dir
Ejemplo: Si el archivo existe Dir devuelve "autoexec.bat" Archivoabuscar = Dir("c:\autoexec.bat") Tambin podemos utilizar los comodines * y ? para filtrar bsquedas. En este ejemplo devuelve el primer archivo exe que encuentra, si es que existe. Archivoabuscar = Dir("c:\windows\*.exe") En este ejemplo la funcin Dir devuelve directorios adems de archivos Archivoabuscar = Dir("c:\, vbdirectory") El nico inconveniente de esta funcin es que siempre devuelve el primer archivo que encuentra. Para que contine buscando los dems archivos debemos poner la funcin sin parmetros. Ejemplo Dim archivo As String archivo = Dir("c:\*.exe") While archivo <> "" archivo = Dir Wend En el ejemplo anterior buscar todos los archivos exe en el directorio c:\. cuando ya no encuentre mas devolver una cadena vaca y saldr del bucle While.
Funcin Dir
Este otro ejemplo verifica si un archivo existe: Private Function Verificar_Existe(path) As Boolean If Len(Trim$(Dir$(path))) Then Verificar_Existe = True Else Verificar_Existe = False End If MsgBox Verificar_Existe End Function Private Sub Form_Load() Call Verificar_Existe("c:\autoexec.bat") End Sub
Funcin FileCopy
FileCopy nos permite copiar archivos. Esta funcin es muy fcil de usar. ejemplo: FileCopy "origen", "destino" Nota: si el archivo existe la funcin lo sobre escribe.
Funcin MkDir
Esta funcin se utiliza para crear directorios, pero crea un directorio por vez, es decir que no crea varios niveles al mismo tiempo. La sintaxis es: MkDir "Ruta directorio" para poder crear un Directorio que contiene varios subdirectorios, podemos hacer lo siguiente: El ejemplo despliega un InputBox para ingresar el path a crear:
Funcin MkDir
Private Sub Command1_Click() Dim i As Integer Dim Array_Dir As Variant Dim Sub_Dir As String Dim El_Path As String El_Path = InputBox("Escriba la ruta del directorio a crear" & _ "con los subdirectorios", " Crear varios niveles de directorios") If El_Path = vbNullString Then Exit Sub 'Desglosa el path Array_Dir = Split(El_Path, "\") El_Path = vbNullString 'Recorre el array anterior para ir creando uno por uno For i = LBound(Array_Dir) To UBound(Array_Dir) Sub_Dir = Array_Dir(i) If Len(Sub_Dir) > 0 Then El_Path = El_Path & Sub_Dir & "\" If Right$(Sub_Dir, 1) <> ":" Then ' Verificamos que no exista If Dir$(El_Path, vbDirectory) = vbNullString Then 'Crea la carpeta Call MkDir(El_Path) End If End If End If Next i End Sub
Funcin kill
La funcin kill se utiliza para eliminar archivos. Tambin es muy fcil de utilizar, y el nico parmetro que lleva es la ruta del archivo que queremos eliminar. Si queremos eliminar varios archivos de un directorio podemos utilizar el comodn"*", y si queremos excluir ciertos archivos utilizamos el comodn "?".
kill "c:\*.txt"
Funcin FileLen
Esta funcin nos devuelve el tamao en bytes de un archivo. Ejemplo: Dim tamao As Long
tamao = FileLen("c:\windows\system32\control.exe")
MsgBox tamao & " bytes" FileLen es muy til para trabajar con archivos aleatorios, ya que si queremos conocer la cantidad de registros que tiene el archivo, debemos dividir el tamao del archivo por el tamao de la estructura.
Funcin FileLen
Ejemplo: Private Type t_personas nombre As String * 20 apellido As String * 20 End Type
Funcin Name
Name se utiliza para renombrar archivos y directorios. Esta funcin no se puede utilizar para renombrar archivos abiertos. Ejemplo: Name "path del archivo viejo a renombrar" as "path y nombre nuevo del archivo" Tambin con esta sentencia podemos mover archivos y directorios a otra ubicacin. para ello debemos cambiar en el segundo parmetro la ruta del archivo.
Funcin RmDir
RmDir elimina directorios o carpetas. Pero antes de eliminar directorios tenemos que estar seguros que la carpeta no contiene archivos, de lo contrario nos dar un error en tiempo de ejecucin. Si el directorio contiene archivos debemos eliminarlos previamente con la sentencia kill. Ejemplo: RmDir "path del directorio a remover"