Visual Basic - Matriz dinamica

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Matriz dinamica

Publicado por Josetxu (75 intervenciones) el 18/11/2002 12:42:04
Hola a todos/as:

Necesito meter en una matriz dinámica de tipo string una serie de datos de un archivo.
No sé de antemano cuantos registros voy a meter en la matriz, por eso tengo que usar una matriz dinámica.
Entonces hago lo siguiente:

Option Explicit
Option Base 1
Dim DichosaMatriz() As String

La declaro arriba del todo pues voy a usarla en varios procedimientos del Form.
Llegado el momento de meter los datos hago lo siguiente:

i = 1
Do While Not EOF (1)
...
Get #1, i, LeeReg 'LeeReg es una variable de registro
DichosaMatriz(i) = LeeReg.Apellido 'El .Apellido es un campo tipo String del registro
i = i + 1
...
Loop

Entonces, cuando i todavía vale 1 me saca un error que dice:

Run-time error "9":
Subscript out of range

Y por supuesto no mete ningún dato en la matriz.

Sin embargo cuando la declaro con longitud fija, por ejemplo:

Dim DichosaMatriz(50) As String

Entonces no me da ningún error y la matriz se inicializa correctamente (claro, siempre que el numero de registros no sobrepase esos 50 elementos)

QUÉ ES LO QUE HAGO MAL????????

Gracias
Josetxu
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Matriz dinamica

Publicado por Elliott (42 intervenciones) el 18/11/2002 15:39:16
Mira lo que puedes hacer es lo siguiente:
Para redimencionar una matriz se utiliza la instrucción

Redim NombreMatriz(tamaño) as TipoDato
y para que no pierdas la data trabajarías con dos matrices algo así:

Option Explicit
Option Base 1
Dim DichosaMatriz() As String
Dim MatrizAuxiliar() As String


i = 1
Do While Not EOF (1)
...

ReDim MatrizAuxiliar(IIf(i <= 1, 1, i - 1)) As String
MatrizAuxiliar() = DichosaMatriz()
For m = 1 To i - 1
MatrizAuxiliar(m) = DichosaMatriz(m)
Next m
Get #1, i, LeeReg 'LeeReg es una variable de registro
ReDim DichosaMatriz(i) As String
DichosaMatriz(i) = LeeReg.Apellido 'El .Apellido es un campo tipo String
i = i + 1
...
Loop
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar