El tema es que estoy haciendo un downloader que lee la lista de archivos a descargar de un archivo ini pero me quede trancado en la parte donde leo el archvio ini por secciones usando un bucle for:
Sub Bajar()
Dim i As Long
FILES = LeerIni("FILES", "Count", TEMP & "\" & nomArchivo)
For i = 1 To FILES
FILE = "file" & i
Direccion = LeerIni(FILE, "url", TEMP & "\" & nomArchivo)
Descr = LeerIni(FILE, "descr", TEMP & "\" & nomArchivo)
Checksum = LeerIni(FILE, "newchecksum", TEMP & "\" & nomArchivo)
LocalFile = LeerIni(FILE, "localversion", TEMP & "\" & nomArchivo)
Comprimido = LeerIni(FILE, "compressed", TEMP & "\" & nomArchivo)
List1.ListItems.Add = Descr
'Download (Direccion)
Next
End Sub
COmo puedo hacer para almacenar en alguna varible estos datos y despues leerlos.
Es decir ya que cada ves que se recorre el bucle las variables son sobreescritas
solo se me ocurre un metodo con clases, pero es algo enredado si te lo explico pero aun asi haber si te sirve xP
Una Clase con las siguientes variables:
IDClass' Este seria el ID de la clase algo asi como el md5 de algo, mas no del archivo descrito por "File & i"
Direccion
Descr
Checksum
LocalFile
Comprimido
Despues declaras las propiedades Get y Let de la clase respectiva )
Para el uso al principio de tu programa cargas TODO el INI en las dichosas clases (Que se crean apartir de una mtriz tipo clase)
Despues haces lo que te plasca con tu archivo ini, al dado caso el archivo ya estara cargado en el programa en las dichas clases.
De esta forma si modificas el ini puedes obtar por obtener la configuracion anterior que se cargo en el archivo ini.
GRacias por responer d tan rapido.
Podrias poner un ejemplo, es que con este prgrama estoy bastante liado ya, aun me queda terminar el CRCChechsum y lo demas.
Creo que ya lo he solucionado:
Cree un Array asi:
Private Type Lista
Direccion As String
Descr As String
Checksum As String
LocalFile As String
Destino As String
Comprimido As String
End Type
Dim Down() As Lista
'Y lo lleno asi
Sub Obtener_Lista()
Dim i As Long
FILES = LeerIni("FILES", "Count", TEMP & "\" & nomArchivo)
ReDim Preserve Down(1 To FILES)
For i = 1 To FILES
FILE = "file" & i
Down(i).Direccion = LeerIni(FILE, "url", TEMP & "\" & nomArchivo)
Down(i).Descr = LeerIni(FILE, "descr", TEMP & "\" & nomArchivo)
Down(i).Checksum = LeerIni(FILE, "newchecksum", TEMP & "\" & nomArchivo)
Down(i).LocalFile = LeerIni(FILE, "localversion", TEMP & "\" & nomArchivo)
Down(i).Comprimido = LeerIni(FILE, "compressed", TEMP & "\" & nomArchivo)
List1.ListItems.Add = Down(i).Descr
'Download (Direccion)
Next
End Sub
Una variante podria ser esta:
Private Type Lista
Direccion As String
Descr As String
Checksum As String
LocalFile As String
Destino As String
Comprimido As String
End Type
dim Coleccion as new Collection
dim Datos as Lista
Dim Down() As Lista
'Y lo lleno asi
Sub Obtener_Lista()
Dim i As Long
FILES = LeerIni("FILES", "Count", TEMP & "\" & nomArchivo)
For i = 1 To FILES
FILE = "file" & i
Datos.Direccion = LeerIni(FILE, "url", TEMP & "\" & nomArchivo)
Datos.Descr = LeerIni(FILE, "descr", TEMP & "\" & nomArchivo)
Datos.Checksum = LeerIni(FILE, "newchecksum", TEMP & "\" & nomArchivo)
Datos.LocalFile = LeerIni(FILE, "localversion", TEMP & "\" & nomArchivo)
Datos.Comprimido = LeerIni(FILE, "compressed", TEMP & "\" & nomArchivo)
List1.ListItems.Add = Datos.Descr
'Download (Direccion)
Coleccion.add Datos
Next
@danicasasm
Es una vaiante que ocuparia mas recursos de procesador al momento de buscar un dicho registro con la instruccion "each".
Aqui dejo algo del codigo que posteo el autor de este hilo a como yo lo haria:
OJO son dos funciones alternativas usar solo una segun se desee:
Private Type Lista
Direccion As String
Descr As String
Checksum As String
LocalFile As String
Destino As String
Comprimido As String
End Type
Dim Down() As Lista
' // Get_List devuelve la cantidad de registros cargados o anidados.
' //---------------------------------------------------------------------
' // NRegToADD = LeerIni("FILES", "Count", TEMP & "\" & nomArchivo)
' // Structr = Structr
' // RegCon = True/False
Public Function Get_List(ByVal NRegToADD As Long, ByRef Structr() As Lista, ByVal RegCon As Boolean) As Long
Dim I As Long
Dim Salto As Boolean
Dim CantRegEx As Long
If NRegToADD <= 0 Then Salto = True ' // Se agregara algo?
If Salto = False Then
If RegCon And Not (Not (Structr) = -1) Then ' // Se continua o se resetea? y esta inicialisada la matriz?
CantRegEx = UBound(Structr) - LBound(Structr) ' // Cantidad de Registros actuales
ReDim Preserve Structr(CantRegEx + NRegToADD) ' // Se continua
Else
ReDim Structr(NRegToADD - 1) ' // Se Resetea
End If
For I = LBound(Structr) To UBound(Structr) ' // Se inicia en 0 pero aun asi uso lbound()
File = "file" & I
Structr(I).Direccion = LeerIni(File, "url", TEMP & "\" & nomArchivo)
Structr(I).Descr = LeerIni(File, "descr", TEMP & "\" & nomArchivo)
Structr(I).Checksum = LeerIni(File, "newchecksum", TEMP & "\" & nomArchivo)
Structr(I).LomocalFile = LeerIni(File, "localversion", TEMP & "\" & nomArchivo)
Structr(I).Comprimido = LeerIni(File, "compressed", TEMP & "\" & nomArchivo)
Next
Get_List = I ' // Se devuelve la cantidad de registros cargados
End If
End Function
' // Get_List devuelve la cantidad de registros cargados o anidados.
' //---------------------------------------------------------------------
' // strfile = TEMP & "\" & nomArchivo
' // Structr = Structr
' // RegCon = True/False
Public Function Get_ListFromFileIni(strFile As String, ByRef Structr() As Lista, ByVal RegCon As Boolean) As Long
Dim I As Long
Dim Salto As Boolean
Dim CantRegEx As Long
Dim NRegToADD As Long
NRegToADD = LeerIni("FILES", "Count", strFile) ' // cargamos la cantidad de registros a cargar
If NRegToADD <= 0 Then Salto = True ' // Se agregara algo?
If Salto = False Then
If RegCon And Not (Not (Structr) = -1) Then ' // Se continua o se resetea? y esta inicialisada la matriz?
CantRegEx = UBound(Structr) - LBound(Structr) ' // Cantidad de Registros actuales
ReDim Preserve Structr(CantRegEx + NRegToADD) ' // Se continua
Else
ReDim Structr(NRegToADD - 1) ' // Se Resetea
End If
For I = LBound(Structr) To UBound(Structr) ' // Se inicia en 0 pero aun asi uso lbound()
File = "File" & I
Structr(I).Direccion = LeerIni(File, "url", strFile)
Structr(I).Descr = LeerIni(File, "descr", strFile)
Structr(I).Checksum = LeerIni(File, "newchecksum", strFile)
Structr(I).LomocalFile = LeerIni(File, "localversion", strFile)
Structr(I).Comprimido = LeerIni(File, "compressed", strFile)
Next
Get_ListFromFileIni = I ' // Se devuelve la cantidad de registros cargados
End If
End Function
Dulces Lunas!¡.