Notifications
Clear all

Agrupamento ente Strings

5 Posts
2 Usuários
0 Reactions
1,074 Visualizações
(@muttley)
Posts: 0
New Member
Topic starter
 

Pessoal , gostaria de saber se há alguma maneira(algoritmo) para agrupar duas strings praticamente semelhantes, cuja diferença de letras (caracteres) seja somente e as vezes 2.

Caracteristicas:

1) As strings tem sometne três tipos de letras (1 , X e 2 ) Loteca
2) O Tamanho é fixo (14)
3) Quando encontrar 2 strings com diferença de 1 letra , estas duas strings são eliminadas e gerada somente 1 string Exemplo:

X,X,1,2,X,2,X,1X,2,2,1,1,1 e X,X,1,2,X,2,X,1,2,2,X,1,1,1

No caso acima estas duas strings são deletadas e gerada somente uma que é:
X,X,1,2,X,2,X,1,X2,2,2,1,1,1

3) Quando encontrar 3 strings com diferença de 1 letra , estas 3 strings são eliminadas e gerada somente 1 string, Exemplo:

X,X,1,2,X,2,X,1,X,2,2,1,1,1 e X,X,1,2,X,2,X,1,2,2,X,1,1,1 e X,X,1,2,X,2,X,1,1,2,X,1,1,1

No caso acima estas 3 strings são deletadas e gerada somente uma que é:
X,X,1,2,X,2,X,1,1X2,2,2,1,1,1

As strings estão todas em determinada coluna (A por exemplo)

Procurei várias maneiras de fazer isto, mas não encontrei

Alguém tem uma ideia de como faze-lo ? :?: :?: :oops:

 
Postado : 22/02/2015 9:31 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Fiz um exemplo pra vc, com 2 comparações, e abaixo, com 3

 
Postado : 22/02/2015 1:32 pm
(@muttley)
Posts: 0
New Member
Topic starter
 

Obrigado gtsalikis

Não querendo explorá-lo, poderia explicar bem genericamente o que foi feito ?
Isto serve para qualquer string de 14 caracteres com uma diferença ? (ou tenho que adaptá-la ?)

 
Postado : 23/02/2015 5:43 am
(@gtsalikis)
Posts: 2373
Noble Member
 

Serve para qualquer string de 14 caracteres.

Primeiro, eu comparo "letra a letra" das 2 strings usando a função EXT.TEXTO:

EXT.TEXTO(A4;{1;2;3;4;5;6;7;8;9;10;11;12;13;14};1)

Se vc usar a ferramenta de "avaliar fórmula", vai poder acompanhar o que acontece passo a passo.

A comparação retorna sempre verdadeiro ou falso, que converti em números e somei (verdadeiro = 1, falso = 0). Então, se a soma der 1, significa que só tem uma variação entre as 2 strings:

SOMA(--(EXT.TEXTO(A4;{1;2;3;4;5;6;7;8;9;10;11;12;13;14};1)<>EXT.TEXTO(A5;{1;2;3;4;5;6;7;8;9;10;11;12;13;14};1)))=1

Com apenas 1 comparação, eu localizei onde está a diferença. Para isso, comparei de novo cada caractere, e multipliquei pelo número dele, assim, o verdadeiro vai me retornar a posição do número:
SOMA((EXT.TEXTO(A4;{1;2;3;4;5;6;7;8;9;10;11;12;13;14};1)<>EXT.TEXTO(A5;{1;2;3;4;5;6;7;8;9;10;11;12;13;14};1))*{1;2;3;4;5;6;7;8;9;10;11;12;13;14})

Com a posição do caractere que difere, usei as funções ESQUERDA e DIREITA para separar o que é igual.

E usei de novo, a função EXT.TEXTO para retirar somente este caractere, das 2 strings, e juntá-los usando o concatenar - &

O resultado final, é concatenar a parte da ESQUERDA, a junção dos caracteres que se diferenciam, e a parte á DIREITA.

Para comparar 3 strings, fiz o mesmo procedimento. Porém, comparei as strings em 2 partes:
A = B
A = C

E depois procedi com a separação deles.

 
Postado : 23/02/2015 6:02 am
(@muttley)
Posts: 0
New Member
Topic starter
 

Muito dez, e solução inteligente, vou adaptar para o que eu quero

Obrigado mais uma vez

 
Postado : 23/02/2015 7:07 am