COMPARAR PARTE DE STRINGS - EXPRESSOES REGULARES
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 ?????????
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 ?????????
sinceramente nao entendi seu exemplo, vc quer comparar oq ??? strings? nomes dos objetos?
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.
A função chama-se GETNOMEOBJETO porque estou passando dois nomes de objetos para ela, não que ela compara dois OBJETOS.
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.
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.
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
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
Faça o seguinte, na hora que você cria o Regex passe um $ no final da string, pois este caractere marca final da string
Porém no seu caso eu não vejo porque você simplesmente não usa
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());
}
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 stringRegex objeto = new Regex(propriedade.ToUpper() + [Ô]$[Ô]);
Porém no seu caso eu não vejo porque você simplesmente não usaprivate 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