A linguagem 4D oferece mais de 20 comandos para lidar com cordas. E com 4D v18 R6, 4D introduz um novo comando: Compare strings. E ainda outro comando foi melhorado: Position. Ambos estes comandos permitem a utilização de opções para resultados mais precisos. Vamos aprender mais!
HDI: Melhorias na comparação de cadeias de caracteres.
Posição
O conhecido comando, Position, permite encontrar a posição do texto dentro de outro texto. Fornece apenas duas opções: posição inicial e correspondência exacta, com base no código de caracteres. A partir de 4D v18 R6, tem agora mais possibilidades de comparação, tais como “sensível a maiúsculas e minúsculas” ou “sensível a acentos”. A língua japonesa também não foi esquecida! Hiragana/Katakana e largura de caracteres também estão disponíveis como opções de pesquisa. Há também a opção de pesquisar a “palavra inteira”.
Comecemos do início.
A primeira opção é “rigorosa”. Tem em conta a capitalização, acentos, etc., bem como as especificidades das línguas. Em alemão, por exemplo, “ß” pode ser assumido como sendo idêntico a “ss”. Em francês, œ, e æ são equivalentes a e “oe” e “ae”.
As outras opções disponíveis falam por si. “case insensitive” e “accent insensitive” permitem-lhe contornar acentos e letras maiúsculas. Para o japonês, “kana insensitive” ignora as diferenças entre katakana e hiragana, e “width insensitive” ignora a largura dos caracteres.
A última opção (muito útil) permite ignorar partes de palavras para encontrar apenas palavras completas (inteiras).
Alguns exemplos
$p:=Position ("home"; "fiz o meu trabalho de casa";0;$length;sk whole word")
// returns zero ! home is not a whole word in this case.
$p:=Position ("Home"; "Fiz o meu trabalho de casa";0;$length;sk case insensitive")
// returns 16; the capital "H" is considered equal to letter "h"
$p:=Position ("João"; "Tenho um amigo chamado João";0;$length;sk accent insensitive")
// returns 23; the accentuated letter "ã" is considered equal to letter "a"
Estas opções podem ser acumuladas!
$p:=Position ("joao"; "Tenho um amigo chamado João";0;$length;sk case insensitive + sk accent insensitive")
// also returns 23; the accentuated letter "ã" is considered equal to letter "a" AND letter "J" is considered equal to letter "j"
Comparar cordas
O novo comando Compare strings permite comparar cordas com as mesmas opções que as adicionadas ao comando Position. Este comando é baseado no idioma definido nas definições da base de dados. Isto pode ser realmente útil para permitir tipos específicos, por exemplo.
O comando regressará:
- zero (0) se as strings forem consideradas idênticas (com base em critérios passados como opções)
- um valor negativo ou positivo se a primeira cadeia fosse classificada antes ou depois da segunda.
Alguns exemplos
No exemplo abaixo, $resultado retorna “1” porque “a” é considerado maior do que “A”. Não pelo seu tamanho, mas por causa do seu código de caracteres!
Lembrete: sk char code torna a comparação independente da língua.
$result:=Compare strings("alpha"; "Alpha"; sk char codes)
Desta vez, $resultado retorna “0” porque as caixas inferior e superior devem ser consideradas como idênticas, graças à opção sk case insensitive.
Lembrete: sk case insensitive faz com que a comparação dependa da língua.
$result:=Compare strings("uma árvore"; "Uma árvore"; sk case insensitive)
Conclusão
Veja o IDH acima e veja como estas novas opções podem ser utilizadas.
Se precisar de gerir pesquisas ou tipos específicos nos seus dados, eles ser-lhe-ão certamente muito úteis. Mais sobre estes comandos pode ser encontrado na documentação: compare cordas e posição.
E não deixe de se juntar à discussão no fórum 4D!