COMPARAR PARTE DE STRINGS - EXPRESSOES REGULARES

FOXMAN 07/03/2012 22:01:21
#396644
Salve, salve, vbmaniacos.

To com um enrosco chato para resolver e não consegui [Ô]ainda[Ô] uma forma adequada e eficaz para sanar este problema.

Tenho a seguinte função :

private bool GetNomeObejto(String obj, String propriedade = null)
{
string expss = obj.ToUpper();

Regex objeto = new Regex(propriedade.ToUpper());
if(objeto.IsMatch(expss))
return true;
else
return false;
}

Esta função eu utilizo para comparar duas strings de modo que se uma sequência de caracteres for igual a outra me retorne True.

Exemplo dessa aplicabilidade :

obj = txtNomeCliente, Propriedade = NomeCliente
obj = cmbTipoCliente, Propriedade = TipoCliente
obj = txtFone, Propriedade = Fone

Até aí tudo bem, a função me retorna TRUE, sem nenhum problema.
Acontece porém que tenho alguns campos que estão sendo comparados e retornando True quando na verdade deveriam ser False.

Exemplos :

obj = cmbCFOPSaidaEstadual, Propriedade = CF
obj = cmbCFOPSaidaInterEstadual, Propriedade = CF

A função deveria retornar False na comparação acima, o que não aconteçe por conta da função encontrar a semelhança entre as duas palavras(no caso CF).

Alguém ?????????
LVFIOROT 07/03/2012 23:15:23
#396650
sinceramente nao entendi seu exemplo, vc quer comparar oq ??? strings? nomes dos objetos?
FOXMAN 07/03/2012 23:33:29
#396652
LVFIOROT, se vc observar verá que a função compara duas strings(GetNomeObejto(String obj, String propriedade = null)) e não dois objetos(APESAR DE SEREM TBEM OBJETOS DO TIPO STRING), os parametros são do tipo STRING, ela recebe uma STRING com o nome de um objeto, e outra STRING com o nome de uma propriedade, PORéM SÃO DO TIPO STRINGS.
A função chama-se GETNOMEOBJETO porque estou passando dois nomes de objetos para ela, não que ela compara dois OBJETOS.




LVFIOROT 08/03/2012 10:31:37
#396665
foi o que entendi, pois vi que o tipo era string, mas como nao domino C# e vi escrito objeto para tudo quando é lado fiquei meio assustado de ter entendi um coisa e aparentemente está apotando ser outra.

Quanto a comparação, se os parametros são iguais e fazem parte do nome do objeto, vc deverá colar mais caracteres para diferenciar um do outro, Presumo.

mesmo assim gostaria de um exemplo/demostração do problema para debugar e ver o problema acontecendo.
LVFIOROT 08/03/2012 10:48:14
#396668
Pelo que percebi, seria interessante manter o padrao que vc ja apresentou, ou seja manter o nome completo do objeto, pois se a expressao de comparação fizer parte do nome de mais de um objeto sempre retornará verdadeiro, pois Expressões Regulares só se preocupam se o valor está presente, onde está presente e uma coleção de retorno.

Sugestão, Trocar as Propriedades ou criar Variações:

Exemplo:

obj = txtNomeCliente, Propriedade = NomeCliente
obj = cmbTipoCliente, Propriedade = TipoCliente
obj = txtFone, Propriedade = Fone

obj = cmbCFOPSaidaEstadual, Propriedade = CFOPSaidaEstadual
obj = cmbCFOPSaidaInterEstadual, Propriedade = CFOPSaidaInterEstadual
OCELOT 08/03/2012 11:16:58
#396670
Resposta escolhida
Faça o seguinte, na hora que você cria o Regex passe um $ no final da string, pois este caractere marca final da string
Regex objeto = new Regex(propriedade.ToUpper() + [Ô]$[Ô]);


Porém no seu caso eu não vejo porque você simplesmente não usa
private bool GetNomeObejto(String obj, String propriedade)
{
return obj.ToUpper().EndsWith(propriedade.ToUpper());
}
FOXMAN 08/03/2012 13:16:35
#396681
Citação:

:
Faça o seguinte, na hora que você cria o Regex passe um $ no final da string, pois este caractere marca final da string

Regex objeto = new Regex(propriedade.ToUpper() + [Ô]$[Ô]);


Porém no seu caso eu não vejo porque você simplesmente não usa
private bool GetNomeObejto(String obj, String propriedade)
{
return obj.ToUpper().EndsWith(propriedade.ToUpper());
}



OCELOT, nem cheguei a testar o [Ô]$[Ô], fui direto na segunda opção que vc me passou.

return obj.ToUpper().EndsWith(propriedade.ToUpper());


Até o presente momento, me parece ser o que eu desejava.
Passou certinho na opção onde tenho como por exemplo uma propriedade com nome CF e um campo no formulario com nome txtCF e outro txtCFOPSaidaEstadual.
Na comparação ele retornou FALSE (corretamente) quando comparou [Ô]CF[Ô] com TXTCFOPSAIDAESTADUAL e retornou TRUE quando comparou [Ô]CF[Ô] com [Ô]TXTCF[Ô].

Não testei ainda se por acaso eu passar algum campo para comparação tipo :

CF e TXTBOLINHADOISCF, talvez retorne TRUE, mas de inicio vou deixar com essa solução proposta por vc.

Thanks, me ajudou muito.....







Tópico encerrado , respostas não são mais permitidas