Avalados por :
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.
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute