Sie sind auf Seite 1von 20

VISUAL

BASIC
APUNTES

MIGUEL ÁNGEL AREAN MIGUEZ.


LISTADO DE TEMAS.

1. DECLARACIÓN DE VARIABLES Y CONSTANTES.


2. OPERADORES.
3. PROCEDIMIENTOS SUB Y FUNCTION. BYVAL BYREF.
4. ENTRADA / SALIDA DE DATOS: INPUTBOX, MESSAGEBOX, MSGBOX, CONSOLE.
5. IF Y SELECT
6. BUCLES FOR, WHILE, DO.
7. FUNCIONES PREDEFINIDAS.
8. STRUCTURES / TYPES.
9. ARRAYS, MATRICES, VECTORES.
10. ARCHIVOS.

DECLARACIÓN DE VARIABLES Y CONSTANTES.


Una variable no es más que una porción de memoria en la que se guardan los datos que pueden ir
cambiando a lo largo de una aplicación, por ejemplo un valor numérico o el contenido de una caja de
texto que queremos utilizar en otra parte de la aplicación.
Una variable está compuesta de su nombre y el tipo de datos que contiene; por ejemplo una variable
puede llamarse “contenido” y su tipo de datos ser un texto, pero tambien podría darse el caso de que
los datos contenidos en ella fueran de carácter numérico.
Para definir (o mejor dicho,declarar una variable) se emplea la siguiente sintaxis:

DIM variable AS TIPO


Donde la palabra Dim significa “dimensiona”, nombre es el “nombre” que queremos dar a la variable
y Tipo es el tipo de datos que contiene. Si no declaramos las variables, estas funcionarán igual pero
estaremos haciendo un gasto de memoria inútil puesto que las variables sin declarar ocupan mucha
más memoria.
Para indicar a Visual Basic que queremos declarar siempre las variables indicaremos en la parte
“General”,”Declaraciones” de la pantalla de código, la siguiente línea de texto:
OPTION EXPLICIT
Si por ejemplo, quisiéramos almacenar en una variable el valor de la caja de texto 1 escribiríamos:

DIM variable AS STRING


Variable = Text1.Text
Si ahora ese valor de “variable” lo queremos mostrar en una caja de texto 2:

Text2.text = variable
A continuación se muestra una tabla con los tipos de datos más utilizados en programación, su gasto
en bytes de memoria y los valores que puede almacenar.

NOMBRE DE DATO TAMAÑO VALORES QUE TOMA


BYTES
Entero (Integer) 2 -32768 a 32767
Entero Largo (Long) 4 -2147483648 a 2147483647
Simple (Single) 4 -3402823 E 38 a –1401298 E –45 para negativos
1401298 E –45 a 3402823 E 38 para positivos
Doble (Double) 8 -17976931348623 E 308 a –494065645841247 E –324 negativos
494065645841247 E –324 a 17976931348623 E 308 positivos
Moneda (Currency) 8 -922337203685477.5808 a 922337203685477.5807
Cadena Texto (String) 1x Desde 0 a 2000 millones en W98 y posteriores
caracter En w3.X hasta 65400 caracteres
Booleano (Boolean) 2 Verdadero o Falso, True o False, 1 o 0
Fecha (Date) 4 Del 1 de enero del 100 al 31 diciembre de 9999
Objeto (Object) 4 Cualquier referencia a un objeto VB (control...)
Byte 1 0 a 255
Variant 16 + 1 x Cualquier valor descrito en los anteriores
caracter

Una variable es un valor que puede cambiar a lo largo de una aplicación; una constante es, sin
embargo, un valor que se mantiene fijo a lo largo de la aplicación. Para definir una constante se
emplea la siguiente sintaxis:
Const nombre = valor
Donde nombre es el “nombre” que queremos dar a la constante y valor es el “valor” que ha de tomar.
Const diasdelasemana = 7
DECLARACIÓN CON STATIC
Existe otra forma de declarar variables de forma que su valor “recuerde” el valor anterior entre dos
declaraciones de esa variable. Veamos un ejemplo:

Sub Main ()
Dim V As Byte
V = 24
Calcular (V)
Calcular (V)
End Sub

Private Sub Calcular (ByVal X As Integer)


Static K As Integer
K=K+X+2
End Sub

Cuando se llama por primera vez a “Calcular” V vale 24 y K vale 0 + 24 + 2 = 26. La segunda vez
que se llama al Sub, K recuerda su anterior valor y vale 26 + 24 + 2 = 52. Si K no fuese Static (Dim)
el valor de K la segunda vez sería 0 + 24 + 2 = 26, es decir, valdría lo mismo las dos veces

ALCANCE DE LAS VARIABLES.


Para definir una variable podemos emplear la palabra DIM. Pero, dependiendo de dónde
coloquemos ese DIM así será donda podamos emplear la variable. Imaginemos un ejercicio como
este.

Dim a As Byte
Sub Main()
a = 10
End Sub

Cuando se declara la variable en la parte de arriba, antes del Main, entonces esa variable se puede
emplear en cualquier parte del módulo, dentro del sub Main o cualquier sub o function.
Veamos en qué lugares podría definir las variables y qué alcance tendrían:
1) Si defino una variable antes del Sub Main, puedo emplearla en todo el módulo del Sub Main.
2) Una variable definida dentro del Sub Main sólo se puede emplear dentro del Sub Main.
3) Cualquier variable definida dentro de un Sub o Function sólo afecta a ese Sub o Function.
No se pueden definir variables en los espacios que quedan entre los Subs Y Functions y el siguiente
Sub / Function.
Las variables pueden tener el mismo nombre y tipo siempre que no tengan el mismo alcance.

OPERADORES.
OPERADOR DESCRIPCIÓN
+ La suma de numeros o texto
- Resta valores
* Multiplicación
/ División
\ División de Enteros
Mod Resto de la división entera
^ Exponenciación
& Concatenación de caracteres
= Igual a...
< Menor que
> Mayor que
<> Distinto que
>= Mayor o igual
<= Menor o igual
AND Evalua varias condiciones si todas se cumplen
OR Evalua las condiciones si alguna se cumple
XOR Evalua condiciones a verdad si 1 y solo 1 es verdad
NOT Cambia algo verdadero a Falso

PROCEDIMIENTOS SUB Y FUNCTION.

Los procedimientos son las unidades de código en el que podemos dividir nuestra aplicación. Se
reconocen 4 Tipos fundamentales que son Sub, Function, Property y Event.
En este curso sólo veremos las dos primeras.

Procedimientos SUB

Un procedimiento Sub es lo que se conoce generalmente como “Subrutina” es decir, una parte de un
código más grande.

Para definir un Sub emplearemos una sintaxis como la que sigue.

Public (o Private) Sub “nombredelsub” (parámetro1 as Tipo, parámetro2 as tipo,...)


End sub

Las palabras Public y Private, hacen referencia al ámbito del Sub, es decir si es de tipo general (lo
podemos “llamar” desde cualquier parte del código) o de tipo privado (sólo funcionará en la
Formulario en el que está escrito). Si no podemos Public o Private el ordenador entenderá que es
private.

“nombredelsub” es un nombre que creamos para nuestro Sub, es aconsejable que el nombre del sub
nos indique algo de lo que el Sub hace.
Los parámetros son datos que el Sub necesita para hacer sus cálculos, y esos datos, como tales
tiene un tipo de datos específico (como las poseían las variables).

Como ejemplo de Sub, el siguiente que calcula la edad de una persona:

Public Sub calculaedad (fecha As Date)


Dim edad as Integer
edad = (Date – fecha) / 365
End Sub

Ahora si tuviéramos un botón de comando en el que, al hacer click quisiéramos llamar al Sub
creado, sólo tendríamos que indicar el nombre del Sub con el parámetro correspondiente.

Private Sub Command1_Click ()


Calculaedad text1.text (caja de texto que contiene una fecha)
End Sub

Procedimientos Function.

Un procedimiento Function, es una función que nos devuelve un valor asociado a su nombre
La sintaxis de un function es la que sigue:

Public Function nombrefunction (parám1 as Tipo, parám2 as Tipo,...) As Tipo del Function.
Nombrefunction = valor
Instrucciones
End Function

Por similitud con los Sub podríamos pensar que son iguales, no obstante existen diferencias que
deben de ser apreciadas:
Aunque ambas tengan un ámbito de actuación (recordemos de Tipo Public o Private) las function
suelen ser generalmente de tipo Public.
Entre paréntesis definimos los tipos de parámetros que enviamos a la función así como su tipo de
datos. La difenrecia más notable que se aprecia es que, fuera del paréntesis, aparece otro AS Tipo
del Function.
Esto quiere decir que el Function, en sí mismo, debe de devolvernos un tipo de datos específico (una
fecha, un número, un texto...) esto se indica de esa forma.

Vamos a convertir el ejemplo de calcular la edad del Sub en un Function con la misma finalidad:

Public Function calcularedad (fecha AS Date) AS Integer


Calcularedad = (Date – fecha) /365
End function

Notar ahora que es “calcularedad”, el nombre del funciton, el que toma el valor de los cálculos, por
eso se dice que un function siempre devuelve un valor asociado a su nombre.
A la hora de emplear (llamar) a un function escribiremos su nombre y los parámetros a pasarle
dentro de un paréntesis:

MsgBox calcularedad (text1.text) Donde text1 es una caja de texto. Esto crearía una MsgBox con el
valor del cálculo de la función calcularedad.

PASO DE PARÁMETROS. BYVAL BYREF

Como hemos visto en el tema de procedimientos (Sub, Function) estos pueden requerir o no requerir
del paso de parámetros para que funcionen según nos interese a nosotros al hacer el programa.
Existen dos formas de pasar esos parámetros: por valor o por referencia. Imaginemos que tenemos
una variable V la cual empleamos para pasar su valor a una function. Si esa función cambiar el valor
del parámetro que recibe y no indicamos nada, el valor original de V se verá alterado, es decir, la
porción de memoria física a la cual acceden la variable y la función es la misma y cualquier cambio
en la segunda afectará a la primera. Veamos un ejemplo:

Sub Main()
Dim V As Integer
Dim Y As Integer
V = 25
Y = 100
Calcular (V, Y)
MSGBOX V
MSGBOX Y
End Sub

Private Sub Calcular (ByVal X As Integer, ByRef Z As Integer)


X=X+2
Z=Z+2
End Function

En el caso del parámetro X, definido como ByVal, el Sub recibe una “copia” del valor original y, a
pesar de que X modifica su valor en el Sub, el original permanecerá invariable, por tanto en el primer
MSGBOX aparecerá un 25. El parámetro Z si variará su valor puesto que es ByRef. El Msgbox
segundo pondrá 102.

ENTRADA DE DATOS INPUTBOX Y MSGBOX. CONSOLE Y MESSAGEBOX.

Un programa puede necesitar mostrar un dato resultado de una operación o pedir al usuario que
introduzca algún otro necesario para realizar los cálculos; es ahí donde cobran importancia los
MSGBOX e INPUTBOX. Ambos son cuadros de diálogo predefinidos (es decir, se incluyen en todos
los programas bajo Windows) y la principal diferencia entre ellos es que el MSGBOX se emplea para
mostrar un resultado o para pedir al usuario respuestas del tipo “SI / NO / CANCELAR”.
El INPUTBOX se emplea para solicitar del usuario cualquier otro tipo de dato como un número o un
nombre.
En las siguientes figuras se muestran dos ejemplos de MSGBOX e INPUT BOX:
Sintaxis del MSGBOX:

a). Si el MSGBOX actúa como un indicador, es decir, no pide una respuesta.

MSGBOX “Texto del Mensaje”,Tipo de Msgbox,”Barra de título”

El texto del mensaje se puede sustituir por una variable que queramos mostrar.

b). Si el MSGBOX actúa esperando una respuesta se hará necesario almacenar el tipo de respuesta
en una variable para su posterior manejo. La variable suele ser tipo BYTE.

nombrevariable = MSGBOX (MSGBOX “Texto del Mensaje”,Tipo de Msgbox,”Barra de título”)


· Fijarse en que en este caso el MSGBOX lleva un paréntesis.
Nota: Puede emplearse también la nueva sintaxis de MSGBOX que es MessageBox.Show en lugar
de MSGBOX.

Sintaxis del INPUTBOX:


La sintaxis del InputBox es siempre única puesto que siempre necesitaremos una variable para
almacenar el valor que genere.
Nombrevariable = INPUTBOX (“Texto de Mensaje”,”Título de la barra”,valor por defecto)
Sintaxis del CONSOLE:

Para aplicaciones de consola se emplea el objeto "Console" que permite mostrar mensajes mediante
WriteLine y leer datos mediante ReadLine.

Dim a As String
Console.WriteLine ("Escribe tu nombre")
a = Console.ReadLine()
Console.WriteLine (a)
ESTRUCTURAS DE DECISIÓN

Una estructura de decisión es aquella parte del código en la que el programa decide entre varias
opciones dependiendo de si se cumple o no cierta o ciertas condiciones.
Veremos dos tipos de estructuras de decisión: IF y SELECT.

• La instrucción IF

Su sintaxis es la siguiente:

a) Si solo tenemos una instrucción para el if:

IF condicion1 Then Instrucción.

b) Si tenemos más de una instrucción para ejecutar cuando se cumple la condición.

IF condición1 Then
Instrucción1
Instrucción2
Instrucción...
End IF

c) Si queremos indicar qué ocurre cuando se cumple la condición y cuando no, entonces
emplearemos la siguiente forma con ELSE.

IF condición1 Then
Instrucción1
Instrucción2
Instrucción...
ELSE
Instrucción1
Instrucción2
Instrucción...
End IF

d) cuando necesitemos evaluar más de una condición emplearemos la forma elseif.

IF condición1 Then (si se cumple esta condición entonces...)


Instrucciones (a realizar)
ElseIf condición2 Then (no se cumple la condición1 si la 2, entonces...)
Instrucciones (a realizar)
ElseIf condición3 then (no se cumple la condición2 si la 3, entonces...)
Instrucciones (a realizar)
Else (no se cumple ninguna condición, entonces...)
Instrucciones (a realizar)
End If (Indica el final se la sintaxis IF)
• LA instrucción CASE

Su sintaxis es la que sigue:

Select Case “nombre variable” (Selecciona según sea el valor de la variable)

Case A (Realizar las instrucciones que siguen si el valor es “A”)


InstruccionesA
Case B (Realizar las instrucciones que siguen si el valor es “B”)
InstruccionesB
Case Else (Si no toma ni el valor “A” ni el “B”, haz estas otras)
InstruccionesX
End Select (Indica el final de la estructura Select)

BUCLES.

Cuando queremos repetir un proceso un número de veces o hasta que ocurra algo (por ejemplo,
hacer click con el ratón) aparecen las estructuras de repetición, de las que veremos dos tipos:
DO/LOOP y FOR/NEXT.
La sintaxis de la primera es:
• DO/LOOP
Do [UNTIL/WHILE] condición1
Instrucciones
Loop
Es decir, realiza las instrucciones hasta (until) o mientras (While) se cumpla la condición
especificada.
Otra forma de escribir esto mismo es:
Do
Instrucciones
Loop [UNTIL/WHILE] condición1

En este caso la comprobación de la condición se realiza al final de la serie de instrucciones;


en el caso anterior se realiza antes de cumplirse las instrucciones.

• FOR/NEXT

Esta estructura nos permite repetir las instrucciones un número determinado de veces.

For i = 1 To 20
Instrucciones
Next i

Esta sintaxis ejecutaría las instrucciones 20 veces, es decir desde que i vale 1 hasta que i valga 20.

Tanto las sintaxis Do como la FOR poseen una instrucción para salir de ellas si nos interesase
hacerlo; esa sintaxis es Exit DO y Exit For, respectivamente. Por ejemplo si no queremos que un
bucle repita más de 100 veces un proceso (proceso1) lo que hacemos es insertar un IF que,
ayudado por una variable contador se asegure de esa circunstancia:

Do
Proceso1 ( )
contar = contar + 1
If contar >= 100 Then Exit Do
Loop
FUNCIONES PREDEFINIDAS EN VISUAL BASIC

Las funciones se definen, en general, como grupos de instrucciones que nos van a devolver un valor
asociado a ellas. Existen 2 tipos de funciones: las definidas por el usuario y las predefinidas por el
propio visual Basic.
Vamos a centrarnos ahora sobre el segundo tipo las funciones definidas por el VB.

En general, la sintaxis para un función predefinida carece de sentido si no va acompañada de una


variable que recoja el valor que la función nos devuelve; podemos decir, de forma general que la
sintaxis de una función predefinida sigue siempre este patrón:

Variable = nombrefunción (parámetro 1, parámetro2, parámetro n...)

Los parámetros son valores que nosotros damos a la función para que esta los procese y nos
devuelva el valor que nos interesa. Puede haber tantos parámetros como sea necesario y también
puede ser que no exista ninguno.

A continuación veremos una tabla con los tipos más importantes de funciones y las más
características de ellas.

FUNCIONES DE TEXTO

NOMBRE FUNCIÓN ¿QUÉ HACE? EJEMPLO / Sintaxis RESULTADO


Right Extrae caracteres por la Right(“Miguel”,2) “el”
derecha en una cadena
de texto.
Left Extrae caracteres por la Left(“Miguel”,2) “Mi”
izquierda de una cadena
de texto.
Mid Extrae caracteres de una Mid(“Brasil ganó el “asil gan”
cadena de texto Mundial”,3,8)
empezando y
terminando en una
posición determinada
Val Convierte un valor de Val(“123”) // 123 // valor numérico de
texto en“numérico”. Val(Text1.text) la caja de texto.
Str Convierte un valor Str(123) 123
numérico en texto.

FUNCIONES FECHA HORA

NOMBRE FUNCIÓN ¿QUÉ HACE? EJEMPLO / Sintaxis RESULTADO


Date Nos da la fecha actual Date 12/05/07
Time Nos da la hora actual Time 14:35:00
FUNCIONES DE CONVERSIÓN DE TIPOS DE DATOS

Sirven para convertir unos tipos de datos en otros (Ej: Integer => Long; Texto => Número)
El nombre de la función determina el tipo devuelto, como se muestra a continuación:

Función Tipo devuelto Intervalo del argumento expresión

Cbool Boolean Cualquier expresión de cadena o


numérica válida.

Cbyte Byte 0 a 255.

Ccur Currency (Moneda) -922.337.203.685.477,5808 a


922.337.203.685.477,5807.

Cdate Date Cualquier expresión de fecha.

CDbl Double -1,79769313486232E308 a


-4,94065645841247E-324 para valores
negativos; 4,94065645841247E-324 a
1,79769313486232E308 para valores
positivos.

Cdec Decimal +/-


79.228.162.514.264.337.593.543.950.335
para números basados en cero, es decir,
números sin decimales. Para números
con 28 decimales, el intervalo es
+/-7,9228162514264337593543950335.
La menor posición para un número que
no sea cero es
0,0000000000000000000000000001.

Cint Integer -32.768 a 32.767; las fracciones se


redondean.

CLng Long -2.147.483.648 a 2.147.483.647; las


fracciones se redondean.

CSng Single -3,402823E38 a -1,401298E-45 para


valores negativos; 1,401298E-45 a
3,402823E38 para valores positivos.

CStr String El mismo intervalo que Double para


valores numéricos. El mismo intervalo
que String para valores no numéricos.

Cvar Variant El valor de retorno de CStr depende del


argumento expresión.
FUNCIONES MATEMÁTICAS.

NOMBRE FUNCIÓN ¿QUÉ HACE? EJEMPLO / Sintaxis RESULTADO


Int Devuelve la parte entera Int(-8.4) -9
de un número.
Fix Trunca la parte decimal Fix(-8.4) -8
de un número.
Abs Devuelve el valor Abs(-150) 150
Absoluto
Sqr Raíz cuadrada Sqr(25) 5
Cos Coseno Cos(90 * 3.14 / 180) 0
Tan Tangente Tan(0 * 3.14 / 180) 0
Sin Seno Sin(90 * 3.14 / 180) 1
Log Logaritmo natural en Log(1) 0
base e.

Las funciones Sin, Cos, Tan admiten el valor en RADIANES.


PASAR A RADIANES: Grados * 3.14 / 180

La diferencia entre Fix e Int es que, al trabajar con valores negativos, fix, trunca el valor mientras
que Int devuelve el mayor número entero que es menor o igual que el argumento, es decir, redondea
hacia abajo.

CÓMO CREAR NÚMEROS ALEATORIOS

Para crear números aleatorios se requieren de dos expresiones:


“Randomize” que inicializa el generador de números aleatorios.
Función “Rnd” que genera un número entre 0 y 1 de forma aleatoria.
Ejemplo de código asociado a un botón de nombre Command1:

Private sub Command1_Click


Dim variable as Long
Randomize
variable = Int (Rnd * 5) + 1
msgbox variable
End sub

Si empleais la versioes más modernas de Visual Basic entonces estas funciones se integran en el
espacio de nombres "Math".

Por ejemplo la función seno sería "Math.sen" en lugar de "sen"


VARIABLES TYPE o STRUCTURES.

Un type (structure en las versiones nuevas de Visual Basic) no es más que un tipo de datos (como
String o Byte) pero que están definidos de acuerdo a unas especificaciones que nosotros damos. De
esta forma podríamos definir tipos de datos para muchas aplicaciones de forma que se adaptasen a
nuestras necesidades. El uso más común de los TYPES / STRUCTURE es cuando deseamos hacer
una especie de “ficha” para un determinado valor. Imaginemos una agenda...

Type ficha
Nombre As String
Telefono As String
Casado As Boolean
End Type

Structure Ficha
Dim Nombre As String
Dim Telefono As String
Dim Casado As Boolean
End Structure.

Con Structure hay que emplear el Dim dentro al declarar las variables.

Este sería el tipo de datos que queremos definir, cada Dato perteneciente a este tipo “ficha” tendrá
tres partes, dos de ellas serán un texto y la otra de tipo boolean.
Pero esto sólo es un tipo de datos, no es una variable... aún. Para poder trabajar con esto
necesitamos definir una variable que sea de este tipo de datos que hemos creado llamado “ficha”...

Dim variable As ficha

Bien ahora ya tenemos nuestra variable del tipo de datos ficha. Para agregar datos sería:

Variable.nombre = “Carlos Pérez”


Variable.Telefono = “986123987”
Variable.Casado = 1

Podríamos combinar matrices y types para obtener matrices con el tipo de datos del Type:

Dim matriz (1 to 100) As ficha.

Esto nos generaría una matriz de 100 elementos y una dimensión, de tipo ficha, y para referirnos a
ellos emplearíamos un número igual que con las matrices, por ejemplo para el elemento 12 de la
matriz definida podríamos escribir:

Matriz (12).nombre = “Carlos”


Matriz(12).telefono = “986123987”
Matriz(12).casado = 1
MATRICES ARRAYS o VECTORES.

El concepto de matriz en VB es exacto al concepto matemático de matriz por lo que nos resultará
más fácil su estudio; no obstante, las matrices en VB también tienen una particularidad que radica en
que VB no distingue entre matrices fila o columna, este es un concepto que debe ser interpretado
por el programador a la hora de definir el comportamiento de la matriz dentro del programa y saber si
lo que estoy manejando es una columna o una fila.

En VB podemos definir matriz como un conjunto de objetos o datos de un determinado tipo que
podemos identificar mediante un índice; es decir, es un conjunto de cosas ordenadas. Este índice es
único y no pueden existir en la misma matriz dos elementos con el mismo índice.

El tipo de objetos o datos que guarda una matriz lo fijamos nosotros cuando “declaramos” esa
matriz. La forma para declarar matrices varía según el tipo de matriz que queramos obtener, así:

Dim matriz (5) As Byte, indicará que queremos definir una matriz, en la que, por defecto, su primer
índice será el 0 mientras que el último será el 5, es decir, la matriz tendrá 6 elementos.

Dim matriz (1 to 100) As String

Dim => Indica que dimensionamos la matriz.

Matriz1 => Es el nombre que yo doy a la matriz. Puede ser cualquiera mientras que no contenga
caracteres prohibidos como / “ • ...

(1 to 100) => Número de elementos que va a contener esta matriz. El primero será el que contenga
el índice 1 y el último el 100.

As String => Tipo de datos string. Indica que, cada uno de los elementos de la matriz contendrá en
su interior datos de tipo texto.

Este ejemplo define una matriz de un determinado número de elementos, en este caso 100, pero
también podemos definir matrices sin prefijar el número de elementos que va a tener, de esta forma:

Dim matriz () As String

En este caso no indicamos cuál es el número de elementos. Lo indicaremos al redimensionar la


matriz (una vez que sepamos cuál será el número de elementos que lleva). Para redimensionar la
matriz emplearemos:

ReDim matriz (1 to 10) As String

De esta forma redimensionamos la matriz para diez elementos. Al redimensionar las matrices se
pierden todos los datos que contengan. A no ser que empleemos Redim Preserve que mantiene los
datos. En unas ocasiones nos interesará mantenerlos o no.
Veamos ahora cómo sería el acceso a los datos que contiene una matriz. Imaginemos una matriz de
2 elementos, y quiero establecer un valor de texto en cada una de las cadenas.

Dim matriz (1 to 2) As String

Ahora establezco los valores para esos dos elementos:

Matriz (1) = “Carlos”


Matriz (2) = “Oscar”

También podría decir que fuesen iguales a una variable de tipo String.
Dim var As String
Var = “Carlos”
Matriz (1) = var

MATRICES DE MÁS DE UNA DIMENSIÓN

Las matrices pueden tener más de una dimensión, para ello se deben de definir de la siguiente
forma:
Dim matriz2D (1 To 10, 1 To 10) As String

Esta matriz que, por ejemplo, serviría para representar puntos en un plano, tiene 10 x 10 = 100
elementos. Si el orden de la matriz fuese 3 (es decir de 1000 elementos) entonces:
Dim matriz3D (1 To 10, 1 To 10, 1 To 10) As String

Esta matriz serviría para representar puntos en un espacio 3D.

EMPLEO DE BUCLES FOR PARA LLENADO DE MATRICES


A veces nos puede interesar rellenar una matriz con valores de forma rápida, o que siguen un
patrón predefinido como por ejemplo con la función escalar U que asigna a puntos de una habitación
un valor para la temperatura. La forma de U es:
U=x^2+y–z
¿Cómo asignaríamos valores de T para una habitación de 1000 x 500 x 250 cm, sabiendo que U
está definida en esa habitación?

Dim x As integer
Dim y As integer
Dim z As Byte
Dim habitacion (1 to 1000,1 to 500, 1 to 250) AS Double

For x = 1 to 1000
For y = 1 to 500
For z = 1 to 250
Habitacion (x,y,z) = x ^ 2 + y – z
Next z
Next y
Next x

Los bucles constarán siempre de tantas variables como dimensiones tiene la matriz y los bucles for
serán siempre anidados de forma que en la parte más interna de ellos sea en donde asignamos los
valores de la función.
Si ahora quisiéramos conocer el valor de Temperaturas en el punto 1, 3, 4 diríamos...

Msgbox habitación (1,3,4)

El resultado sería cero en este caso (1 ^ 2 + 3 – 4 ) = 0


ACCESO A ARCHIVOS. SECUENCIALES Y ALEATORIOS (OPEN)

Un fichero es una porción de memoria del disco duro a la que damos un nombre y una extensión. La
ventaja de los ficheros es que, al estar en el disco duro, la información que contengan se puede
recuperar aunque el equipo se apague, al contrario que la memoria RAM.

ACCESO SECUENCIAL

Estos ficheros son los llamados comúnmente ficheros de texto (TXT) o ficheros planos. en ellos la
información se guarda en líneas de texto. Para leer una línea concreta es necesario pasar por todas
las anteriores.

Para abrir un fichero de texto necesitamos conocer su ruta (en qué carpeta se guarda) para lo que
se puede emplear una variable string.

Dim fichero As String


fichero = "C:\datos.txt"

Para abrir el fichero tendremos que emplear la sentencia OPEN, y dar un modo de apertura que
puede ser Append, Input o OutPut.

APPEND OUTPUT INPUT


ESCRIBIR ESCRIBIR LEER
Escribe al final del archivo Borra lo que hay y escribe. Lee líneas.

No se puede abrir un fichero secuencial para leer y escribir al mismo tiempo, habría que cerrarlo y
volver a abrirlo.

EL CANAL.

El canal de apertura es un valor necesario para poder abrir el fichero y su valor es el que devuelve la
función FREEFILE.

Ejemplo.

Dim canal As Integer


Open fichero For Output As Canal
Close canal

La instrucción CLOSE cierra el fichero.


ESCRIBIR SECUENCIALES.

Una vez que hacemos el open, con el modo que necesitemos, podemos escribir o leer datos. Para
escribir empleamos las instrucciones PRINT y WRITE.

Dim canal As Integer


Open fichero For Output As Canal

Print canal, "HOLA"

Close canal

En este caso creamos una línea en el fichero que dice HOLA.

Print escribe un solo texto en la línea tal cual y Write puede escribir varios valores que se separan
por comas también en el fichero.

Dim canal As Integer


Open fichero For Output As Canal

Write canal, "HOLA", 123, 01/10/2012

Close canal

LEER SECUENCIALES.

Para leer empleamos la instrucción Line Input o Input. La primera solo permite leer una línea del
fichero, guardarla en una variable y pasar a la siguiente.

Dim canal As Integer


Dim variable As String

Open fichero For Input As Canal


Line Input canal, variable
Close canal

Con Input puedo leer múltiples valores separados por comas en varias variables.

Dim canal As Integer


Dim variable As String
dim variable2 As String

Open fichero For Input As Canal


Input canal, variable, variable2
Close canal

Para leer todo el fichero será necesario emplear la función EOF en un bucle.
While NOT EOF(canal)
Line Input canal, variable
End While
ACCESO ALEATORIO

Los ficheros de acceso aleatorio permiten simultanear lectura y escritura con un solo OPEN. Están
directamente asociados a los STRUCTURES. Tienen un único modo de apertura que es RANDOM y,
después del canal, es necesario especificar la longitud de la variable dependiente del STRUCTURE
mediante la función LEN.

Structure Ficha
Dim nombre As String
Dim apellido As String
Dim dirección As String
Dim edad As Integer
End Structure

Dim cliente As Ficha.


Dim canal As Freefile

Open "C:\datos.dat" For Random As canal Len = Len(cliente)

Close canal

Esto provoca que el fichero se abra "compartimentado" en porciones en las que cada una de ellas
tiene la longitud del structure.

Dim cliente As Ficha.


Dim canal As Freefile

Open "C:\datos.dat" For Random As canal Len = Len(cliente)

cliente.nombre = "Carlos"
cliente.apellido = "Martinez"
cliente.dirección = "Avenida 9 de julio n° 2054"
cliente.edad = 45

Put canal, posición, cliente

Close canal

Posición es la posición del fichero sobre la que queremos escribir y es una valor numérico.
Para calcular el número total de posiciones de un fichero se divide la longitud del mismo entre lo que
ocupa cada dato.

Nposiciones = LOF(canal) / Len(Structure / Type)


ACCESO A ARCHIVOS. SECUENCIALES Y ALEATORIOS (FILEOPEN)

La forma de acceso a ficheros con FILEOPEN sigue las mismas normas que con open, simplemente
cambia un poco la forma de escribir las instrucciones.

 Para Ficheros Secuenciales.

Dim id as Integer
FileOpen (id, “C:\fichero.txt”, OpenMode.Append)

El modo de apertura puede ser OpenMode.Append, OpenMode.Input y OpenMode.OutPut


Para cerrar se emplea FileClose (id)

 Para ficheros aleatorios.

Dim V As TipoDelStructure.
Dim id as Integer
Dim tamaño As Integer
tamaño = Len (V)

FileOpen(id, “C:\Fichero.dat”, OpenModeRandom,,,tamaño)

Para Leer Datos: FileGet (id, V, posición)


Para Escribir Datos: FilePut(id,V,posición)

Para calcular el total de posiciones, una vez hecho el FileOpen,

Dim posiciones As Integer


posiciones = LOF(id)/LEN(V)

Para cerrar FileClose(id)

Das könnte Ihnen auch gefallen