Procesado de textos /Text Processing
(English Below)
Cuando es necesario extraer textos de
un fichero, buscar patrones, parsearlos, etc, la solución
ideal es utilizar expresiones regulares. Este método
nos da un enfoque más declarativo sobre el patrón que
queremos buscar en el texto, en lugar de definir cómo se va a
hacer esa búsqueda.
El lenguaje por excelencia en el uso de
la expresiones regulares es Perl. Es un lenguaje de script que
incluye un soporte nativo para expresiones regulares dentro de su
propia sintaxis. Aquí tenéis un ejemplo de cómo
se parsearía un listado de teléfonos en Perl :
#
Abrir fichero con todos los códigos
open
(Tfnos,
$ruta)
|| die "No
puedo abrir fichero";
while
(<Tfnos>)
{
if(/(.+)-(\d+)/)
#formato de línea: Nombre -
Teléfono
{
my
$nombre
= $1;
my
$tfno
= $2;
}
}
close(Tfnos);
Simple, eh? Con este soporte podemos
realizar todo tipo de operaciones con cadenas, que en lenguajes
púramente imperativos requerirían mucho más
esfuerzo. Aun así, lenguajes y plataformas como PHP, Java,
.NET ya incluyen librerías o paquetes para incluir esta
funcionalidad.
(English)
When we need to
extract information from a file, look for a pattern, or parse a text,
the ideal solution is using regular expressions. This
technique uses a declarative approach, defining the search pattern,
instead of programming how the search will be performed.
The 'state of the
art' programming languaje for regular expressions is Perl, a
script languaje which includes native support within its own sintax
for regular expressions. Next, you can see a simple example showing
how to parse a basic name-phone directory in Perl:
#
Abrir fichero con todos los códigos
open
(Tfnos,
$ruta)
|| die "No
puedo abrir fichero";
while
(<Tfnos>)
{
if(/(.+)-(\d+)/)
#formato de línea: Nombre -
Teléfono
{
my
$nombre
= $1;
my
$tfno
= $2;
}
}
close(Tfnos);
Simple, uh? With
this feature we can perform a wide range of string operations, which
would require much more effort in pure imperative languages. However,
other languages and frameworks such as PHP, Java or .NET already
include libraries or packages to use this functionality.