• Publicidad

Sustituir un carácter

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Sustituir un carácter

Notapor alperez » 2013-11-14 17:52 @786

Hola, buenas.

Estoy intentado sustituir este carácter <tr> por un salto de línea "\n", pero todos mis intentos han sido fallidos. Quizás no sé pueda hacer, pero antes de rendirme me gustaría conocerlo de algún experto.

El problema que tengo es sencillo: estoy intentando sacar una información de una única línea y necesito poner salto de línea para poder interpretarla línea a línea.

Saludos.
alperez
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-14 17:48 @783

Publicidad

Re: Sustituir un carácter

Notapor explorer » 2013-11-14 18:06 @796

Bienvenido a los foros de Perl en Español, alperez.

No me queda claro qué es lo que quieres hacer. ¿Puedes poner un ejemplo de la entrada y cómo quieres que sea la salida?

Quizás no necesites poner caracteres de nueva línea para interpretar la línea...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Sustituir un carácter

Notapor alperez » 2013-11-14 18:18 @804

Hola. Sí, es verdad, se me ha pasado poner un ejemplo.

Pues tenemos el siguiente trozo de cadena.

<tr><td><big><b><span style='color:#003366;'>Datos agregados <u>hoy</u> <i>2013-11-13:</i></span><span style='color:red;'>18</span></b></big><br><br><table><tr><td></td><td>

Sería posible sustituir (yo había pensando en sustituir <td>) por un salto de línea y así separar la cadena

<tr>
"salto de linea"
<big><b><span ......


La cadena es más grande e imposible de sacar casi información de ella. Por eso había pensando en intentar sustituir algún valor de dentro por un salto de línea y tratarlo línea a línea buscando los valores que necesito.
alperez
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-14 17:48 @783

Re: Sustituir un carácter

Notapor explorer » 2013-11-15 07:16 @344

Si el html está bien formado, entonces es muy fácil sacar la información. Por ejemplo, usando la distribución Mojolicious, y desde la misma línea de comandos:
Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ perl -Mojo -E 'say x(q(<tr><td><big><b><span style="color:#003366;">Datos agregados <u>hoy</u> <i>2013-11-13:</i></span><span style="color:red;">18</span></b></big><br><br><table><tr><td></td><td>))->all_text(0)'
  2. Datos agregados hoy 2013-11-13: 18
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Usando expresiones regulares para quitar todo el marcado HTML, también es muy fácil:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. $_ = q(<tr><td><big><b><span style='color:#003366;'>Datos agregados <u>hoy</u> <i>2013-11-13:</i></span><span style='color:red;'>18</span></b></big><br><br><table><tr><td></td><td>);
  3.  
  4. s/<.+?>//g;   # quitamos el marcado HTML
  5.  
  6. print "$_\n";   # Datos agregados hoy 2013-11-13:18
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Si lo que quieres es sólo cambiar <td> por un avance de línea, cambia el operador de sustitución anterior por s/<td>/\n/g;
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Sustituir un carácter

Notapor alperez » 2013-11-16 06:31 @313

¡Muchas gracias, explorer!

He revisado lo de Mojolicious y, la verdad que me ha venido muy bien.

Una cosilla, lo de la expresión regular s/<.+?>//g; no la entiendo muy bien lo que quiere decir. ¿Podrías explicarme cómo se traduce?

Me cuesta a veces ver las expresiones regulares en Perl.

Saludos.
alperez
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-14 17:48 @783

Re: Sustituir un carácter

Notapor explorer » 2013-11-16 10:50 @493

s/<.+?>//g es el operador de sustitución s///, junto con la opción /g, que sirve para hacer la misma sustitución a lo largo de todo texto. Como no hemos indicado ningún variable, lo aplicará a la variable por defecto $_.

El patrón de búsqueda es /<.+?>/, que quiere decir:
  • busca un carácter '<',
  • seguido por uno a más caracteres cualesquiera (.+), pero solo hasta justo antes (?) de
  • un carácter '>'
En otras palabras, localizamos todo el marcado HTML del tipo '<lo que sea >'.

Y eso se sustituye por la segunda parte del operador, //, que no es nada, es decir, que realmente lo que estamos haciendo es quitar lo que encontremos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Sustituir un carácter

Notapor alperez » 2013-11-18 03:16 @178

Ok, gracias de nuevo.
alperez
Perlero nuevo
Perlero nuevo
 
Mensajes: 32
Registrado: 2013-11-14 17:48 @783


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado