Página 1 de 1
Generar una matriz
Publicado: 19 Ene 2012, 19:16
por arkcrew
Hola a todos, me he atascado en un código y como me he desesperado, recurro a vosotros por si alguien me echa un cable.
Os comento, tengo un programa que descarga canciones, tengo la lista de descargas con los arhivos en un
_GUICtrlListView y ahora el problema es:
El programa para las descargas simultaneas se manda de la siguiente manera:
Global $archivos[total_archivos] = [archivo1,archivo2,archivo3]
descarga_simultanea($archivos, $descargas_simultaneas)
Pero para ello debo previamente generar la matriz y eso es lo que no se como hacer..
Pense esto:
Código: Seleccionar todo
$total = _GUICtrlListView_GetItemCount($hListView2)
For $a = 0 To $total
$archivos[$a] = _GUICtrlListView_GetItemText($hListView2, $a)
Next
espero vuestra ayuda!
Saludos!
Re: Generar una matriz
Publicado: 19 Ene 2012, 20:29
por jamaro
arkcrew ¿cómo creaste el ListView? ¿leíste las canciones y las metiste en el listview? ¿no creaste primero una matriz?
Supongo que si preguntas el paso inverso de ListView a Matriz, será porque no creaste primero la matriz
Yo normalmente creo una matriz con los datos que leo en la página web, y luego ya creo el ListView con los datos de la matriz.
Googleando he visto esto en el foro inglés:
http://www.autoitscript.com/forum/topic ... -listview/
Espero que te sirva.
Re: Generar una matriz
Publicado: 19 Ene 2012, 21:25
por arkcrew
Gracias jamaro, el problema es que no es un list que se genere desde los datos web, sino que ese list está compuesto por las canciones que el usuario quiere añadir a la lista de descargas, por tanto solo añade la que selecciona, y no es una array propiamente dicho, de ahi que queira el caso inverso.
Saludos!
PD. ahora comento que tal va eso
Re: Generar una matriz
Publicado: 19 Ene 2012, 21:48
por arkcrew
Pufff esto es una movida xDDDD
El array se genera bien con esa función pero no se, supongo que no estaré hoy muy lúcido, peor es que no lo consigo!
Os dejo la función de descarga múltiple:
Código: Seleccionar todo
Func _MultiDownload($asFiles, $iSimultaneous)
If IsArray($asFiles) = 0 Then Return SetError(1, 0, 0) ;$asFiles must be array
If UBound($asFiles, 0) <> 2 Then Return SetError(2, 0, 0) ;a 2-dimensional array
If IsInt($iSimultaneous) And $iSimultaneous < 1 Then Return SetError(3, 0, 0) ;make sure $iSimultaneous is a number above 0
Local $ahInet[$iSimultaneous][UBound($asFiles)], $afResults[UBound($asFiles)]
$iSimultaneous -= 1 ;cheat so we don't need UBound() later in the For-loops ;)
;For temporary stuff
Local $avInet, $iBusy
;For temporary end
While 1
Sleep(10)
For $iX = 0 To $iSimultaneous
If $ahInet[$iX][0] <> "" Then
$avInet = InetGetInfo($ahInet[$iX][0])
If $avInet[2] Then
$afResults[$ahInet[$iX][1]] = $avInet[3]
InetClose($ahInet[$iX][0])
$ahInet[$iX][0] = ""
EndIf
EndIf
Next
For $iX = $iSimultaneous To 0 Step -1
If $ahInet[$iX][0] <> "" Then ContinueLoop
If IsArray($asFiles) = 0 Then ExitLoop
$ahInet[$iX][1] = UBound($asFiles) - 1
$asFile = __ArrayPop2D($asFiles)
$ahInet[$iX][0] = InetGet($asFile[0], $asFile[1], 1, 1)
Next
$iBusy = 0
For $iX = 0 To $iSimultaneous
If $ahInet[$iX][0] <> "" Then $iBusy += 1
Next
If $iBusy < 1 Then ExitLoop
WEnd
Return $afResults
EndFunc ;==>_MultiDownload
Func __ArrayPop2D(ByRef $avArray)
Local $iUBound = UBound($avArray) - 1
Local $asLastVal[2] = [$avArray[$iUBound][0], $avArray[$iUBound][1]]
; Remove last item
If Not $iUBound Then
$avArray = ""
Else
ReDim $avArray[$iUBound][2]
EndIf
; Return last item
Return $asLastVal
EndFunc ;==>__ArrayPop2D
Como veis, la matriz que hay que pasarle debe cumplir la estructura:
Código: Seleccionar todo
Global $asFiles[5][2] = [["http://dl.dropbox.com/u/18344147/Opera_1110_int_Setup.exe", @ScriptDir & "\Opera Desktop 11.10.exe"], ["http://dl.dropbox.com/u/18344147/Opera_Mobile_11_Win7.exe", @ScriptDir & "\Opera Mobile for Desktop.exe"], ["http://something.something/something.something", @ScriptDir & "\Poop.exe"], ["http://dl.dropbox.com/u/18344147/autoit-v3.3.6.1-setup.exe", @ScriptDir & "\AutoIt 3.3.6.1.exe"], ["http://dl.dropbox.com/u/18344147/SciTE4AutoIt3%202010.02.28.exe", @ScriptDir & "\SciTE4AutoIt.exe"]]
Y la que me genera el script anterior es del tipo contenido_columna1,contenido_columna2 y me está costando adaptarlo porque como veis, solo necesito la ulr y el nombre del archivo para hacer la descarga, osea puedo hacer una operacion para generar a partir de ese array otro que si que sea del tipo que necesito.. ideas??
Saludos!
Re: Generar una matriz
Publicado: 19 Ene 2012, 22:35
por arkcrew
Estaba algo espeso, lo solucione asi:
Código: Seleccionar todo
Global $lista[UBound($archivos)][2]
For $a = 1 To UBound($archivos) - 1
$url = $archivos[$a][1]
$name = $download_dir & "\" & $archivos[$a][0]
$lista[$a][0] = $url
$lista[$a][1] = $name
Next
Simplemente di la vuelta a la matriz
Saludos!
Re: Generar una matriz
Publicado: 20 Ene 2012, 15:17
por Jonny
No entiendo bien que es lo que quieres...
¿crear un array simplemente?.
¿Pero a partir de una variable que no es un array?...
En cualquier caso, si quieres crear un array a partir de una variable que no es array, puedes usar dim:
Y, si quieres redimensionar un array, usas ReDim:
Salu2!
Re: Generar una matriz
Publicado: 21 Ene 2012, 17:49
por arkcrew
Tenía una matriz y tenía que generar otra con el contenido cambiado de orden, pero ya lo solucioné, que no atinaba , peor ya está funcional.
Gracias,
Saludos!