Comparação de strings
Moderador: Moderadores
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Comparação de strings
Olá... Bom dia...
Tenho uma variável Nivel.
Nivel = '9'
Se faço a comparação
Nivel >= '10'
Retorna .t.
Se faço a comparação
Nivel >= '90'
Retorna .f.
Porque ?
Obrigado
Rubens
Tenho uma variável Nivel.
Nivel = '9'
Se faço a comparação
Nivel >= '10'
Retorna .t.
Se faço a comparação
Nivel >= '90'
Retorna .f.
Porque ?
Obrigado
Rubens
"Eu e minha casa servimos ao Senhor e você
"
-
paiva_dbdc
- Usuário Nível 3

- Mensagens: 342
- Registrado em: 12 Nov 2012 09:58
- Localização: uberlandia mg
Comparação de strings
Boa
o problema que nivel = 1 posicao
ja apanhei muito (rs)
agora so uso == ai ele compara
noseu caso como tem > e = aqho que vai ter que converter para numerico
val(pnivel)
Paiva
o problema que nivel = 1 posicao
ja apanhei muito (rs)
agora so uso == ai ele compara
noseu caso como tem > e = aqho que vai ter que converter para numerico
val(pnivel)
Paiva
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Comparação de strings
Ola!
Comparação de strings usamos (=, ==,)Igual, exatamente igual e (<>, !=, #,) todos esses são sinais usados para diferente ou "NOT EQUAL"
O sinal < (maior) e >(menor) usamos p/ campos numéricos.
Diferença de = e ==:
"ABC" = "ABC " Resulta .T. (True)
"ABC" == "ABC " Resulta .F. (False) o detalhe são os espaços em branco que uma tem e a outra não tem.
Saudações,
Itamar M. Lins J.
Comparação de strings usamos (=, ==,)Igual, exatamente igual e (<>, !=, #,) todos esses são sinais usados para diferente ou "NOT EQUAL"
O sinal < (maior) e >(menor) usamos p/ campos numéricos.
Diferença de = e ==:
"ABC" = "ABC " Resulta .T. (True)
"ABC" == "ABC " Resulta .F. (False) o detalhe são os espaços em branco que uma tem e a outra não tem.
Saudações,
Itamar M. Lins J.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Comparação de strings
Olá pessoal,
No caso de comparação com string numérica, o número de casas precisa ser igual. Nesse caso, como nivel tem 1 caractere, ao comparar com os demais checa somente o primeiro dígito, e indiferente do estado de SET EXACT. Se ao invés de 1 digito alterar a variável nivel para '09' funciona. Veja neste exemplo:
No caso de comparação com string numérica, o número de casas precisa ser igual. Nesse caso, como nivel tem 1 caractere, ao comparar com os demais checa somente o primeiro dígito, e indiferente do estado de SET EXACT. Se ao invés de 1 digito alterar a variável nivel para '09' funciona. Veja neste exemplo:
Código: Selecionar todos
Function Main()
Local nivel, lexact:=Set( _SET_EXACT, .T. )
Clear Screen
nivel := '9'
?
? 'nivel:', nivel, ' - comparacao por 1 digito (da erro)'
?
? [nivel >= '10':], nivel >= '10' // retorna .T.
? [nivel <= '10':], nivel <= '10' // retorna .F.
nivel := '09'
?
? 'nivel:', nivel, 'comparacao por 2 digitos (da certo)'
?
? [nivel >= '10':], nivel >= '10' // retorna .F.
? [nivel <= '10':], nivel <= '10' // retorna .T.
?
? ['A' >= 'B':], 'A' >= 'B' // retorna .F.
?
? ['A' <= 'B':], 'A' <= 'B' // retorna .T.
?
Set( _SET_EXACT, lexact )
ReturnAbraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
- rubens
- Colaborador

- Mensagens: 1520
- Registrado em: 16 Ago 2003 09:05
- Localização: Nova Xavantina - MT
Comparação de strings
Obrigado Pessoal
Vou fazer os testes e adequações
Rubens
Vou fazer os testes e adequações
Rubens
"Eu e minha casa servimos ao Senhor e você
"
Comparação de strings
Complementando:
== compara conteúdo e tamanho (espaços em branco ou outros caracteres)
“ABC”=”ABCD “ -> .t.
“ABC”==”ABCD” -> .f.
“ABC”==”ABC ” -> .f.
ctod(“01/01/2015”)< ctod(“31/01/2015”) -> .t.
“ABC”<”ABD” -> .t.
“abc@”>”abc?” -> .t., porque o chr do “@” é maior que o chr do “?”
= compara conteúdo"ABC" = "ABC" Resulta .T. (True)
"ABC" == "ABC " Resulta .F. (False) o detalhe são os espaços em branco que uma tem e a outra não tem.
== compara conteúdo e tamanho (espaços em branco ou outros caracteres)
“ABC”=”ABCD “ -> .t.
“ABC”==”ABCD” -> .f.
“ABC”==”ABC ” -> .f.
Pode ser alfa-numérica.No caso de comparação com string numérica...
Também pra datas e strings.O sinal < (maior) e >(menor) usamos p/ campos numéricos.
ctod(“01/01/2015”)< ctod(“31/01/2015”) -> .t.
“ABC”<”ABD” -> .t.
“abc@”>”abc?” -> .t., porque o chr do “@” é maior que o chr do “?”
- Itamar M. Lins Jr.
- Administrador

- Mensagens: 7929
- Registrado em: 30 Mai 2007 11:31
- Localização: Ilheus Bahia
- Curtiu: 1 vez
Comparação de strings
Ola!
Pois é, essa de comparar as strings com > e < eu não tenho o hábito de usar.
"A" é maior que "B" significa que o código na tabela ASCII do A é 65 e B é 66 por isso A é menor que B.
Podemos confundir achando que o conteúdo de A é maior que B ou vice-versa. Tipo A:=10, B:=1
Não sei se é um boa prática isso.
Saudações,
Itamar M. Lins Jr.
Pois é, essa de comparar as strings com > e < eu não tenho o hábito de usar.
"A" é maior que "B" significa que o código na tabela ASCII do A é 65 e B é 66 por isso A é menor que B.
Podemos confundir achando que o conteúdo de A é maior que B ou vice-versa. Tipo A:=10, B:=1
Não sei se é um boa prática isso.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Itamar M. Lins Jr.
-
Kapiaba
- Colaborador

- Mensagens: 1908
- Registrado em: 07 Dez 2012 16:14
- Localização: São Paulo
- Contato:
Comparação de strings
Sr. Jairo, assim me parece bem:
Código: Selecionar todos
Function Main()
Local nivel, lexact:=Set( _SET_EXACT, .T. )
nivel := '9'
? 'nivel:', nivel, ' - comparacao por 1 digito (nao da erro)'
? [nivel >= '10':], VAL(nivel) >= VAL('10') // retorna .F.
? [nivel <= '10':], VAL(nivel) <= VAL('10') // retorna .T.
nivel := '09'
? 'nivel:', nivel, 'comparacao por 2 digitos (da certo)'
? [nivel >= '10':], VAL(nivel) >= VAL('10') // retorna .F.
? [nivel <= '10':], VAL(nivel) <= VAL('10') // retorna .T.
? ['A' >= 'B':], ASC('A') >= ASC('B') // retorna .F.
? ['A' <= 'B':], ASC('A') <= ASC('B') // retorna .T.
Set( _SET_EXACT, lexact )
Return Nil
- Jairo Maia
- Moderador
- Mensagens: 2785
- Registrado em: 16 Ago 2010 13:46
- Localização: Campinas-SP
Comparação de strings
Olá Kapiaba,
Sem dúvida. Porém, a dúvida do autor do tópico era comparar variáveis strings, e não variáveis numéricas, e perguntou: Porque?.
Me ative apenas ao objeto do tópico.
---------------------------------------------
Editado:
Olá Itamar,
Na tabela ASCII temos que:
"A" = 65 e "B" = 66.
Porém, a rigor, em código binário a comparação é:
"A" = 01000001 e "a" = 01100001
"B" = 01000010 e "b" = 01100010
Então: "A" é menor que "a" e "B" é menor que "b".
Quando se trata de conteúdo de variáveis, a questão é outra.
Sem dúvida. Porém, a dúvida do autor do tópico era comparar variáveis strings, e não variáveis numéricas, e perguntou: Porque?.
Me ative apenas ao objeto do tópico.
---------------------------------------------
Editado:
Olá Itamar,
Na tabela ASCII temos que:
"A" = 65 e "B" = 66.
Porém, a rigor, em código binário a comparação é:
"A" = 01000001 e "a" = 01100001
"B" = 01000010 e "b" = 01100010
Então: "A" é menor que "a" e "B" é menor que "b".
Quando se trata de conteúdo de variáveis, a questão é outra.
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Comparação de strings
Concordo.Podemos confundir achando que o conteúdo de A é maior que B ou vice-versa. Tipo A:=10, B:=1
Não sei se é um boa prática isso.
Usar variáveis de nome “A” ou “B”, como no seu exemplo, e aplicá-las em alguma comparação, é mesmo temerário.
Já usando variáveis que identifiquem mais claramente o conteúdo, tipo Final:=10 e Inicial:=1, o risco é muito menor.
Aliás, Inicial:=”01” e Final:=”10”, de conteúdo alfanumérico e sempre de mesmo tamanho, já que o tópico fala de comparação de strings.
Mas enfim, como eu disse antes, ”>” e “<” não se aplicam somente a números, mas também a strings e datas. No caso destas últimas, cabe também a recomendação de se usar por exemplo os nomes “dInicial e dFinal”, ao invés de B e A, respectivamente, pra não gerar confusão.