¡Caminando hacia el éxito!

Aprende en Comunidad

Avalados por :

Como alterar o caso de strings em Perl: dicas e soluções multilíngues

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 0 Vistas
0
Cargando...

Após o meu último post sobre um comando de uma linha em Perl para filtrar caracteres de aspas escapadas de um CSV antes de importá-lo para BI, tenho explorado mais maneiras de aproveitar o poder e a velocidade dos scripts de Perl. No entanto, nem tudo são rosas, mesmo quando se supera a impenetrabilidade da sintaxe do Perl.

A peculiaridade que encontrei hoje é a mudança de caso das strings. Perl fornece as funções lc e uc (para mudar para minúsculas e maiúsculas, respectivamente) com esse propósito. No meu script para importar um formato de registro e exportar outro, pensei que converter todos os campos para maiúsculas seria a tarefa mais simples. Mas durante os testes, parecia que o arquivo de entrada utf-8 continha alguns caracteres acentuados que uc não estava convertendo.

Felizmente, o Perl nos fornece mais de uma maneira de resolver esse problema em particular.

O primeiro passo foi escrever um script para confirmar minha suspeita.

for (32..255) {     my $c = chr($_);     my $uc = uc $c;     my $lc = uc $c;     if ( $uc eq $lc ) {          print "${_}: ${c}\t${uc}\t${lc}\n";     }}

Isso não apenas confirmou meus pensamentos de que uc não estava convertendo os caracteres acentuados, mas também me deu uma boa lista desses caracteres para consulta.

O comando que vem em nosso auxílio é tr/// ou transliterar. Em inglês, isso significa que ele troca todos os caracteres que encontra no primeiro argumento de tr pelo caractere correspondente do segundo argumento. Portanto, dado o comando tr/abc/123/, qualquer letra a na string em que o tr opera será substituída por 1, b será substituída por 2 e c por 3. Ao preencher uma chamada tr com todos os caracteres que encontramos que não estavam sendo convertidos para maiúsculas em nosso último teste (e o padrão A-Z, a-z, caso necessário), podemos construir nossa própria sub-rotina de maiúsculas.

sub upper($) {     $_ = shift;     tr/abcdefghijklmnopqrstuvwxyzšœžàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿþ/ABCDEFGHIJKLMNOPQRSTUVWXYZŠŒŽÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜݟÞ/;     return uc $_;}

Portanto, sem ter que recorrer a mexer com a configuração regional ou qualquer outra coisa que não entendo, temos uma substituição multilíngue para uc.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

Sin respuestas

No hay respuestas para mostrar No hay respuestas para mostrar Se el primero en responder

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?