Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: nhaalclkiemr en 24 Agosto 2007, 00:15 AM

Título: Problema con matrices
Publicado por: nhaalclkiemr en 24 Agosto 2007, 00:15 AM
Weno, pues explico mi problema a ver si se entiende:

A mi me gustan las matrices dentro de otras matrices, y lo que quiero es tener varios archivos en matrices de esta forma:

filedata(0)(1 to FileLen(file1))
filedata(1)(1 to FileLen(file2))
filedata(2)(1 to FileLen(file3))
filedata(3)(1 to FileLen(file4))
filedata(4)(1 to FileLen(file5))


Una matriz filedata, cada elemento de la matriz es una matriz que contiene un array de bytes de cada archivo

Eso consigo hacerlo, lo malo es que tengo que declarar esto:

Código (vb) [Seleccionar]
Dim i As Long
Dim file(0 to 3) As String
file(1) = "C:\archivo1.txt"
file(2) = "C:\archivo2.txt"
file(3) = "C:\archivo3.txt"
ReDim filedata(0 to numerodearchivos) As Variant
For i = LBound(file) to UBound(file)
ReDim tempfiledata(0 to FileLen(file(i)) - 1) As Byte
filedata(i) = tempfiledata
Erase tempfiledata
Next i


Weno, como veis tengo que utilizar una matriz tempfiledata temporal, pero este no es el mayor problema, sino que si tengo que pasar esta matriz a una funcion pues me da un error:

Imaginaros esta funcion:

Código (vb) [Seleccionar]
Function convertirBytes (ByRef filedata() As Byte) As Long
'Ahora aki iria cualkiera cosa, el argumento lo paso ByRef pork las matrices hay que pasarlas siempre ByRef
End Function


Pues cojed el primer code que puse, pues si después llamo a la funcion así me da un error:

Código (vb) [Seleccionar]
Call convertirBytes (filedata(0))

En teoría filedata(0) es un array de bytes, y la funcion es lo que pide, pero me da un error. Yo creo que el error se debe a que filedata está declarada como Variant...pero la tengo que declarar como Variant para después poder meter dentro el array de bytes...Si la declaro como Byte despues no puedo meter dentro un array de Bytes...

La unica solución que encontré fue algo parecido a lo que hice al principio, usar una matriz temporal. Llamaría a la funcion de esta forma:

Código (vb) [Seleccionar]
ReDim tempfiledata (LBound(filedata(0)) to UBound(filedata(0))) As Byte
tempfiledata = filedata(0)
Call convertirBytes (tempfiledata)
Erase tempfiledata


Entonces así si que me funcionaría...pero imaginate que tengo que llamar a muchas funciones y tengo muchos archivos y grandes (es decir, muchos array de bytes), pues entonces andar pasando grandes cantidades de bytes a variables temporales reducen la velocidad de la aplicación...

Por eso me gustaría que me dierais posibles solucíones, lo importante es pasar a una funcion que pide un array de bytes pues eso, un array de bytes que está contenida en otra matriz...más claro no lo puedo decir...


Weno, si alguien me puede ayudar que escriba algo, espero vuestra ayuda, un saludo ;)
Título: Re: Problema con matrices
Publicado por: elmaro en 24 Agosto 2007, 17:06 PM
es un tema complicado a mi pensar, yo no podria darte posibles soluciones en codigo, poruqe no seme ocurren :P  xd

pero si te digo es que, hay posibilidad de q sean muchos archivos????
de ultima q la aplicacion tenga su tiempo de respuesta, hay muchas aplicaciones q tardan unos segundos en responder el pedido del usuario, asi q no te hagas mucho problema

suerte con tu app
Título: Re: Problema con matrices
Publicado por: CeLaYa en 25 Agosto 2007, 03:38 AM
mira lo que se me ocurre es usar estructuras

primero declaras uns estructura para contener una matriz:

Type otramatriz
    datos() As Variant
End Type


luego declaras una matriz que sea del tipo de la estructura que acabas de crear:

Public matriz() As otramatriz



luego puedes redimensionar a tu gusto las matricez

    ReDim matriz(1 To 10)
    ReDim matriz(1).datos(1 To 10)
    ReDim matriz(2).datos(1 To 10)
    ReDim matriz(3).datos(1 To 10).....


y no se, pero creo que para lo de pasar la matriz a la función puedes hacerlo asi:

Function convertirBytes (ByRef una_matriz() As otramatriz) As Long
********
end function
Título: Re: Problema con matrices
Publicado por: MANULOMM en 25 Agosto 2007, 06:09 AM
yo apoyo la idea de Celaya... me parece estupenda!!!!

Atentamente,


Juan Manuel Lombana
Medellín - Colombia
Título: Re: Problema con matrices
Publicado por: nhaalclkiemr en 25 Agosto 2007, 13:54 PM
mmm, no había pensado en eso, gracias pienso que debe funcionar, lo pruevo y ya te digo

Gracias y un saludo ;)
Título: Re: Problema con matrices
Publicado por: nhaalclkiemr en 25 Agosto 2007, 17:02 PM
Me funciono perfectamente tu idea ;D ;D muchas gracias :xD

He incluso no tengo que modificar la funcion, puedo pasar el array de bytes filedata(1).datos perfectamente con la funcion Function convertirBytes (ByRef una_matriz() As Byte), no hace falta que haga como decias tu Function convertirBytes (ByRef una_matriz() As otramatriz) As Long  ;D

Saludos ;)
Título: Re: Problema con matrices
Publicado por: CeLaYa en 25 Agosto 2007, 22:04 PM
que bueno que te funciono  ;D