Linguagem 4D – Melhorias na comparação de cordas

Tradução automática de Deepl

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!

Roland Lannuzel
- Proprietário do produto & Especialista 4D - Depois de estudar electrónica, a Roland entrou nas TI industriais como desenvolvedor e consultor, construindo soluções para clientes com uma variedade de bases de dados e tecnologias. No final dos anos 80, apaixonou-se pela 4D e utilizou-a para escrever aplicações comerciais que incluem sistemas de contabilidade, facturação e correio electrónico. Juntando-se à empresa em 1997, as valiosas contribuições de Roland incluem a concepção de especificações, ferramentas de teste, demonstrações, bem como formação e palestras para a comunidade 4D em muitas conferências. Ele continua a moldar activamente o futuro da 4D, definindo novas características e ferramentas de desenvolvimento de bases de dados.