Notifications
Clear all

combinador de listas

19 Posts
3 Usuários
0 Reactions
2,052 Visualizações
(@edcronos2)
Posts: 0
New Member
Topic starter
 

gostaria de ajuda na estruturação de uma macro
ela tem que formar uma lista da indicação de outras listas
até tinha começado bem mas não sei onde deu nó na minha cabeça e acabei estragando o código todo
e agora não consigo nem refazer oq já estava pronto por causa das ideias múltiplas

basicamente seria um codigo semi recursivo com verificador


Sub substitui()
     Dim tib(1 To 10)
     tib(1) = "3;5;7"
     tib(2) = 4
     tib(3) = 0
     tib(4) = "3;0;6"
     tib(5) = 0
     tib(6) = "9;0"
     tib(7) = 0
     tib(8) = "1;0"
     tib(9) = 0
     tib(10) = 0
     
     n = 2
     MsgBox Join(Forma_Lista(tib, n), ";")

     ' para o 1 o resultado tem que ser
     '3;5;7    ----- por que todos tem 0 como valor

     'para o 2 o resultado seria 3;4;9;6
     'quando tiver 0 o resultado tem que ser o numero do indice no caso o endereço da matriz

     'ainda tenho que definir pontos de ferificação de profundidade caso em algum ponto um deles idique algum que inicie loop infinito
End Sub 

infelizmente eu acabei bagunçando o codigo e só estou postando para terem uma ideia

Function Forma_Lista(lista As Variant, ByVal linha As Long) As Variant
     Dim C As Long, tem As Boolean

Le_Lista:
     cis = Split(lista(linha), ";")
     If lista(linha) <> 0 Then

          tem = False
          For C = 0 To UBound(cis)
               d = Split(lista(cis(C)), ";")
               
               If UBound(d) > 0 Then
                    cis(C) = lista(cis(C))
                    d = Split(lista(cis(C)), ";")
                    If UBound(d) > 0 Then tem = True
               End If
               
               If UBound(d) > 0 Then
               End If

          Next

          If tem Then linha = 1: lista(linha) = Join(cis, ";"): GoTo Le_Lista
     End If
     Forma_Lista = cis
End Function

a listas gerada tem que ser formadas na ordem de aparição de cada indice

 
Postado : 12/12/2016 11:31 am
(@edcronos2)
Posts: 0
New Member
Topic starter
 

correção
gera lista =3
=10;3
seria
gera lista =3
=1;3
pq o 10 aponta para o 1

esse treco é ou não um quebra cabeça, e eu ainda fui apagar a primeira versão funcional

 
Postado : 12/12/2016 4:44 pm
(@edcronos2)
Posts: 0
New Member
Topic starter
 

bem
pensei em uma pequena possível solução para os 0
usar um simbolo e o numero do índice
assim se pode usar o isnumeric para não ter releitura e no final do processo tirar todos os símbolos que tiver na listagem

pior que depois disso ainda tenho quepensar em um contador de profundidade caso algum indice indique outro que em algum ponto indique para ele mesmo

 
Postado : 12/12/2016 5:23 pm
(@edcronos2)
Posts: 0
New Member
Topic starter
 

largei a preguiça mental de lado e mexi aplicando a ideia exposta
ficou quase igual a primeira que fiz

Function Forma_Lista(lista As Variant, ByVal linha As Long) As Variant
     Dim C As Long, tem As Boolean

Le_Lista:
     cis = Split(lista(linha, 1), ";")
     If lista(linha, 1) <> 0 Then

          tem = False
          For C = 0 To UBound(cis)
          If IsNumeric(cis(C)) Then
               d = Split(lista(cis(C), 1), ";")
               
               If UBound(d) > 0 Then
                    cis(C) = lista(cis(C), 1)
                    d = Split(cis(C), ";")
                    If UBound(d) > 0 Then tem = True
               End If
               End If
          Next

          If tem Then linha = 1: lista(linha, 1) = Join(cis, ";"): GoTo Le_Lista
     End If

deve ter como melhorar
vou ter que implementar um extrator para os simbolos

tenho que implementar tbm um controle de profundidade

vou aguardar para ver se alguem apresenta uma solução melhor

 
Postado : 12/12/2016 6:49 pm
(@edcronos2)
Posts: 0
New Member
Topic starter
 

vou ter que fazer umas correções ainda e implementar mais um bocado de coisa para fazer oq eu quero,
a solução foi mesmo tirar os zero e colocar um caractere junto do indice para indicar uma não intervenção

o pior mesmo vai ser a versão inversa, que é criar um indice compactado da lista de indice maior

 
Postado : 13/12/2016 10:00 am
Página 2 / 2