Notifications
Clear all

Formatar Dados extraidos de uma base

4 Posts
2 Usuários
0 Reactions
498 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Pessoal,

Preciso da ajuda de vocês

Eu tenho uma função que extrai os dados e traz o campo que preciso formatar da seguinte forma:


CN=José Junior,OU=Sem_policy,OU=Pre,OU=Vips_Usuarios,OU=Mesbla,DC=grupo,DC=mesbla
CN=bloqueado,OU=GP_Outros,DC=grupo,DC=mesbla
CN=Luiz Junior,OU=Gr,OU=Vips_Usuarios,OU=Mesbla,DC=grupo,DC=mesbla
CN=Benedito ,OU=Users_Desligados,DC=grupo,DC=mesbla

Preciso que a fórmula (01 só é aplicável para todos) converta a visão em


grupo.mesbla/Mesbla/Vips_Usuarios/Pre/Sem_policy/José Junior
grupo.mesbla/GP_Outros/bloqueado
grupo.mesbla/Mesbla/Vips_Usuarios/Gr/Luiz Junior
grupo.mesbla/Users_Desligados/Benedito

Grato pelo apoio! ;)

[]s

 
Postado : 11/10/2013 11:58 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Eu consegui usando 10 colunas auxiliares levando em conta o maior e o menor resultado possível, talvez os experts podem reduzir minha lógica para ficar mais interessante

Vou explicar como consegui:

Levando em Conta que os dados estejam em A1:A4 temos os valores:


CN=José Junior,OU=Sem_policy,OU=Pre,OU=Vips_Usuarios,OU=Mesbla,DC=grupo,DC=mesbla
CN=bloqueado,OU=GP_Outros,DC=grupo,DC=mesbla
CN=Luiz Junior,OU=Gr,OU=Vips_Usuarios,OU=Mesbla,DC=grupo,DC=mesbla
CN=Benedito ,OU=Users_Desligados,DC=grupo,DC=mesbla

Na B1 usei a fórmula

=(NÚM.CARACT(A1)-NÚM.CARACT((SUBSTITUIR(A1;",";""))))

Explicação
Dessa forma identifico o máximo de quebras que os exemplos trazer me baseando na vírgula (,)

Na C1 usei a fórmula:

=SUBSTITUIR(SUBSTITUIR(SUBSTITUIR(SUBSTITUIR(A1;"DC=";"%");"OU=";"%");"CN=";"%");",";"")&"%"

Explicação
Assim substituo os valores que o AD traz de DC,OU e CN por "%" eu tinha colocado asterisco (*) mas "cagou" a fórmula lá na frente

Na D1 usei a fórmula

=EXT.TEXTO(C1;(LOCALIZAR("%";C1)+1);(LOCALIZAR("%";C1;LOCALIZAR("%";C1)+1)-LOCALIZAR("%";C1)-1))

Explicação
Dessa forma identifico o primeiro bloco que ficou entre os carcteres especiais (%) e trago o valor na célula

Na E1:K1 usei a fórmula

=SEERRO(EXT.TEXTO(DIREITA(C1;NÚM.CARACT(C1)-NÚM.CARACT(D1)-1);(LOCALIZAR("%";DIREITA(C1;NÚM.CARACT(C1)-NÚM.CARACT(D1)-1))+1);(LOCALIZAR("%";DIREITA(C1;NÚM.CARACT(C1)-NÚM.CARACT(D1)-1);LOCALIZAR("%";DIREITA(C1;NÚM.CARACT(C1)-NÚM.CARACT(D1)-1))+1)-LOCALIZAR("%";DIREITA(C1;NÚM.CARACT(C1)-NÚM.CARACT(D1)-1))-1));"@")

Explicação
Eu sei que no mínimo haverá um bloco válido entre os carcteres especiais (%), a partir do segundo preciso ver se traz algum valor, caso contrário substituo por "@"
Para cada coluna que aumentar eu devo aumentar na fórmula o cálcula da quantidade de caracteres da célula anterior e decrementar 1, ou seja:

Na F1 fica:

=SEERRO(EXT.TEXTO(DIREITA(C1;NÚM.CARACT(C1)-(NÚM.CARACT(D1)+NÚM.CARACT(E1))-2);(LOCALIZAR("%";DIREITA(C1;NÚM.CARACT(C1)-(NÚM.CARACT(D1)+NÚM.CARACT(E1))-2))+1);(LOCALIZAR("%";DIREITA(C1;NÚM.CARACT(C1)-(NÚM.CARACT(D1)+NÚM.CARACT(E1))-2);LOCALIZAR("%";DIREITA(C1;NÚM.CARACT(C1)-(NÚM.CARACT(D1)+NÚM.CARACT(E1))-2))+1)-LOCALIZAR("%";DIREITA(C1;NÚM.CARACT(C1)-(NÚM.CARACT(D1)+NÚM.CARACT(E1))-2))-1));"@")

Na G1 fica:

=SEERRO(EXT.TEXTO(DIREITA(C1;NÚM.CARACT(C1)-(NÚM.CARACT(D1)+NÚM.CARACT(E1)+NÚM.CARACT(F1))-3);(LOCALIZAR("%";DIREITA(C1;NÚM.CARACT(C1)-(NÚM.CARACT(D1)+NÚM.CARACT(E1)+NÚM.CARACT(F1))-3))+1);(LOCALIZAR("%";DIREITA(C1;NÚM.CARACT(C1)-(NÚM.CARACT(D1)+NÚM.CARACT(E1)+NÚM.CARACT(F1))-3);LOCALIZAR("%";DIREITA(C1;NÚM.CARACT(C1)-(NÚM.CARACT(D1)+NÚM.CARACT(E1)+NÚM.CARACT(F1))-3))+1)-LOCALIZAR("%";DIREITA(C1;NÚM.CARACT(C1)-(NÚM.CARACT(D1)+NÚM.CARACT(E1)+NÚM.CARACT(F1))-3))-1));"@")

E assim por diante, por fim na L1 que monta o resultado que quero usei a fórmula

=SE(ESQUERDA(SUBSTITUIR(SUBSTITUIR(SUBSTITUIR(K1&"@"&J1&"/"&I1&"/"&H1&"/"&G1&"/"&F1&"/"&E1&"/"&D1;"@";"");"//";"");"mesbla/grupo";"grupo.mesbla");1)="/";DIREITA(SUBSTITUIR(SUBSTITUIR(SUBSTITUIR(K1&"@"&J1&"/"&I1&"/"&H1&"/"&G1&"/"&F1&"/"&E1&"/"&D1;"@";"");"//";"");"mesbla/grupo";"grupo.mesbla");NÚM.CARACT(SUBSTITUIR(SUBSTITUIR(SUBSTITUIR(K1&"@"&J1&"/"&I1&"/"&H1&"/"&G1&"/"&F1&"/"&E1&"/"&D1;"@";"");"//";"");"mesbla/grupo";"grupo.mesbla"))-1);SUBSTITUIR(SUBSTITUIR(SUBSTITUIR(K1&"@"&J1&"/"&I1&"/"&H1&"/"&G1&"/"&F1&"/"&E1&"/"&D1;"@";"");"//";"");"mesbla/grupo";"grupo.mesbla"))

Tive que avaliar alguns resultados que estavam começando por /

Bem foi isso que fiz parece que deu certo, se alguém quiser e puder ajudar para melhorar será bem vindo!

Vou deixar mais uns dias aberto depois fecho o tópico!

Vlw Galera! ;)

 
Postado : 14/10/2013 10:20 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Eu tinha feito algo (está no pc em casa), mas acabou que eu precisei de umas 4 colunas auxiliares.

O grande problema é que vc quer a ordem dos "OU" invertida, senão seria fácil.

Dessa forma:

Sem_policy/Pre/Vips_Usuarios/Mesbla

eu sei que daria pra fazer sem coluna auxiliar.

 
Postado : 15/10/2013 10:06 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Na verdade não é nem eu que quero mas é como o Objeto canônico do AD fica mapeado porém ele traz os dados dessa forma

Como disse e usei essas se alguém consegui otimizar será muito bem-vindo

Abraços

 
Postado : 15/10/2013 11:59 am