Problema con matrices

Iniciado por nhaalclkiemr, 24 Agosto 2007, 00:15 AM

0 Miembros y 1 Visitante están viendo este tema.

nhaalclkiemr

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 ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

elmaro

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

CeLaYa

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
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

MANULOMM

yo apoyo la idea de Celaya... me parece estupenda!!!!

Atentamente,


Juan Manuel Lombana
Medellín - Colombia


nhaalclkiemr

mmm, no había pensado en eso, gracias pienso que debe funcionar, lo pruevo y ya te digo

Gracias y un saludo ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

nhaalclkiemr

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 ;)
StasFodidoCrypter 1.0 - 100% (old)
StasFodidoCrypter 2.0 - 85% (deserted)
Fire AV/FW-Killer - 97% (deserted)
R-WlanXDecrypter 1.0- 100%

CeLaYa

que bueno que te funciono  ;D
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.