Avalados por :
Tras mi último blog sobre un comando de una línea en Perl para filtrar caracteres de comillas escapadas de un CSV antes de importarlo a BI, he estado encontrando más formas de aprovechar el poder y la velocidad de los scripts de Perl. Sin embargo, no todo es color de rosa, incluso cuando has superado la inpenetrabilidad de la sintaxis de Perl.
La peculiaridad que encontré hoy es cambiar el caso de las cadenas. Perl proporciona las funciones lc y uc (cambiar a minúsculas y mayúsculas respectivamente) con este propósito. En mi script para importar un formato de registro y exportar otro, pensé que convertir todos los campos a mayúsculas sería la tarea más simple. Pero durante las pruebas, parecía que el archivo utf-8 de entrada contenía algunos caracteres acentuados que uc no estaba convirtiendo.
Afortunadamente, Perl nos proporciona más de una manera de resolver este problema en particular.
El primer paso fue escribir un script para confirmar mi sospecha.
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"; }}
Esto no solo confirmó mis pensamientos de que uc no estaba convirtiendo los caracteres acentuados, sino que me dio una buena lista de esos caracteres para consultar.
El comando que viene en nuestra ayuda es tr/// o transliterar. En inglés, esto significa que intercambia todos los caracteres que encuentra en el primer argumento de tr con el carácter correspondiente del segundo argumento. Entonces, dado el comando tr/abc/123/, cualquier letra a en la cadena en la que opera tr será reemplazada por un 1, b será reemplazada por 2 y c por 3. Al llenar una llamada tr con todos los caracteres que encontramos que no se estaban convirtiendo a mayúsculas en nuestra última prueba (y el estándar A-Z, a-z por si acaso) podemos construir nuestra propia subrutina de mayúsculas.
sub upper($) { $_ = shift; tr/abcdefghijklmnopqrstuvwxyzšœžàáâãäåæçèéêëìíîïðñòóôõöøùúûüýÿþ/ABCDEFGHIJKLMNOPQRSTUVWXYZŠŒŽÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝŸÞ/; return uc $_;}
Entonces, sin tener que recurrir a jugar con la configuración regional o cualquier otra cosa que no logro entender, tenemos un reemplazo multilingüe para uc.
contacto@primeinstitute.com
(+51) 1641 9379
(+57) 1489 6964
© 2024 Copyright. Todos los derechos reservados.
Desarrollado por Prime Institute