GRAVAR NUMA ARRAY

USUARIO.EXCLUIDOS 01/04/2005 12:46:35
#76155
GALERA ESTOU COM UMA DÃÅ¡VIDA CLUEL...
COMO SOU MEIO INICIANTE... AS VEZES TENHO QUE GUARDAR INFORMAÇÕES EM FORMA DE LISTA.. EM LISTBOXES E COMBOBOXES...
Jà OUVI FALAR QUE O CORRETO é ARMAZENAR EM ARRAYS.. COMO FAZER ISSO?
EXEMPLO...
TENHO 5 NOMES EM UM LISTBOX

JOSé DA SILVA
MARCOS DA SILVA
LILIA DA SILVA
ERIC DA SILCA
JOSEMAR DA SILVA

COMO ADICIONAR ESTE NOMES EM UM ARRAY?
DETALHE: A QUANTIDADE DE NOMES é VARIàVEL.. HORA é 5... HORA é 10... HORA é 50... HORA é 2....
COMO FAZER ISSO?
USUARIO.EXCLUIDOS 01/04/2005 13:18:06
#76162
'Pode ser assim

Dim matrizLISTA() as Strring

'Declarei uma matriz

ReDim matrizLISTA ( 1 TO 5 )

'REDIMENCIONEI-A PARA 5 ELEMENTOS


matrizLISTA ( 1 ) = "JOSE DA SILVA"

matrizLISTA ( 2 ) = "JOSE DA SILVA"

matrizLISTA ( 3 ) = "JOSE DA SILVA"

matrizLISTA ( 4 ) = "JOSE DA SILVA"

matrizLISTA ( 5 ) = "JOSE DA SILVA"


LISTBOX.DATASOURCE = MATRIZLISTA
USUARIO.EXCLUIDOS 01/04/2005 13:34:34
#76166
Resposta escolhida
Option Explicit

Dim lup As Long
Dim coringa As String

Private Sub Form_Load()
'abre o arquivo texto e atribui a chave #1 pra ele
Open "C:    este.txt" For Input As #1
'aqui eu fiz um array com 100001 linhas e 11 colunas (armazena 100001 registros com até 11 nomes e sobrenomes)
'o correto aqui era fazera contagem de linhas do txt primeiro pra depois dimensionar o array, mas ele é tão rápido que
'não faz diferença (só vai alocar um pouco mais de memória da máquina.
ReDim todos(100000, 10)
'loop pra pegar os registros do txt, não precisa de incremento (movenext).
Do While Not EOF(1)
Input #1, coringa
'armazeno o valor da linha na variável coringa
For lup = 0 To UBound(Split(coringa, " "))
'dou um split (divisão) do coringa, usando o espaço " " como separador. O ubound aí de cima é pra contar quantos
'pedaços forma o nome que está naquela linha. Depois, cada pedaço é armazenado na linha/coluna
'correspondente do array
todos(qqu, lup) = Split(coringa, " ")(lup)
Next
Loop
Close #1
'aproveitei que você colocou "SILCA" pra ver se ele está funcionando corretamente
'lembre-se que trabalhamos com array a partir do índice 0. Tem como apontar para o índice 1 como o inicial
' mas no momento eu esqueci como fazer.
MsgBox "O terceiro nome da quarta linha é " & todos(3, 2)
End Sub


Se quiser, faça um loop preliminar, pra pegar o maior ubound(Split(coringa, " ")), armazene esse maior valor pra depois redimensionar o array corretamente. Junto com o loop pra saber o nº de linhas do txt, seu array vai ficar perfeito.

O uso de array é realmente muito eficaz, rapidíssimo. O carregamento também é muito rápido, mesmo pra milhões de linhas. Só pra descarregar da memória é que ele demora mais um pouco, mas essa sensação só vai aparecer quando seu array bater nas centenas de milhares de linhas. Outra desvantagem - essa, real -é a falta de interface com o usuário.
USUARIO.EXCLUIDOS 01/04/2005 13:41:05
#76169
Se quiser mais detalhes sobre o desempenho dos arrays, veja:

Artigo

Projeto-exemplo

USUARIO.EXCLUIDOS 01/04/2005 14:15:50
#76182
Errei!!!

Fui fazer uma "limpeza" no projeto e joguei fora algumas coisas que não poderia descartar.

Option Explicit

Dim lup, [txt-color=#0000ff]qqu[/txt-color] As Long
Dim coringa As String
[txt-color=#0000ff]Dim todos() As String[/txt-color]

Private Sub Form_Load()
'abre o arquivo texto e atribui a chave #1 pra ele
Open "C:    este.txt" For Input As #1
'aqui eu fiz um array com 100001 linhas e 11 colunas (armazena 100001 registros com até 11 nomes e sobrenomes)
'o correto aqui era fazera contagem de linhas do txt primeiro pra depois dimensionar o array, mas ele é tão rápido que
'não faz diferença (só vai alocar um pouco mais de memória da máquina.
ReDim todos(100000, 10)
'loop pra pegar os registros do txt, não precisa de incremento (movenext).
[txt-color=#0000ff]qqu = 0[/txt-color]
Do While Not EOF(1)
Input #1, coringa
'armazeno o valor da linha na variável coringa
For lup = 0 To UBound(Split(coringa, " "))
'dou um split (divisão) do coringa, usando o espaço " " como separador. O ubound aí de cima é pra contar quantos
'pedaços forma o nome que está naquela linha. Depois, cada pedaço é armazenado na linha/coluna
'correspondente do array
todos(qqu, lup) = Split(coringa, " ")(lup)
Next
[txt-color=#0000ff]qqu = qqu + 1[/txt-color]
Loop
Close #1
'aproveitei que você colocou "SILCA" pra ver se ele está funcionando corretamente
'lembre-se que trabalhamos com array a partir do índice 0. Tem como apontar para o índice 1 como o inicial
' mas no momento eu esqueci como fazer.
MsgBox "O terceiro nome da quarta linha é " & todos(3, 2)
End Sub
Tópico encerrado , respostas não são mais permitidas