• Publicidad

Buscar la existencia de una palabra al final de la cadena

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Buscar la existencia de una palabra al final de la cadena

Notapor seafree » 2020-08-26 14:46 @657

¿Qué tal? Buenas tardes.

Estoy buscando la existencia de and al final de una cadena $sql:

$sql="SELECT local,eq,descrip_mantto,atend,f_inicio,f_termino ,lic,edo,actividad from t_manttos tm, c_manttos cm where tm.tipo_mantto=cm.tipo_mantto and tm.local='TMD' and f_inicio::date between '2020-01-01' and '2020-07-31'";

La búsqueda la realizo de la siguiente manera:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  if ($sql !=~  /$and/) {
  2.         print "EXISTE";
  3.  }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


RESULTADO: Me arroja que EXISTE pero eso es falso porque la última palabra es una fecha.

Agradeceré de su gran apoyo para descubrir si la última palabra de la cadena corresponde a un "and".
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Publicidad

Re: Buscar la existencia de una palabra al final de la caden

Notapor explorer » 2020-08-26 15:57 @706

La línea

if ($sql !=~ /$and/) {

es muy confusa... El patrón es una variable escalar llamada $and. No estás buscando por 'and', si no por lo que contenga la variable $and.

Como supongo que $and no la tienes declarada ni definida, estará por defecto vacía. Como no usas 'use strict', Perl no te ha podido avisar de que estás cometiendo un error sintáctico.

Entonces estás buscando la cadena vacía dentro de... ¡$_! ya que lo que has escrito es esto:

if ( $sql != ~/$and/) {

O sea, es una comparación numérica entre $sql (que se convertirá en 0, por ser una cadena que no empieza por número), con el resultado de hacer la negación binaria (~) del resultado de buscar una cadena vacía en la variable $_... El resultado de la parte derecha es 18446744073709551615. Entonces, como 0 es distinto de 18446744073709551615, el resultado es positivo y por eso ves el mensaje de que existe.

En realidad, deberías haberlo escrito así:

if ($sql =~ /and$/i) {

Ahora sí estamos aplicando el operador de coincidencia entre $sql y el patrón. Y el patrón tiene un ancha ($) que marca el final de la cadena. La opción /i es para buscar tanto por mayúsculas como minúsculas.

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. $ perl -E '$sql = "SELECT local,eq,descrip_mantto,atend,f_inicio,f_termino FROM t_manttos tm, c_manttos cm WHERE tm.tipo_mantto=cm.tipo_mantto AND tm.local=`TM0` and"; say "Sí" if $sql =~ /and$/i '
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
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: Buscar la existencia de una palabra al final de la caden

Notapor seafree » 2020-08-27 09:49 @451

Correcto, explorer.
Gracias.
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Re: Buscar la existencia de una palabra al final de la caden

Notapor seafree » 2020-08-27 10:13 @467

¿Por qué si ejecuto el código desde la línea de comandos, como el ejemplo que tu envías, funciona correctamente PERO si lo inserto en el código no funciona como debería?

Gracias
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518

Re: Buscar la existencia de una palabra al final de la caden

Notapor explorer » 2020-08-27 12:03 @544

Crea un código mínimo que falle. Es decir, pon una cadena de prueba, y el código que lo compruebe, y lo mandas aquí.
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: Buscar la existencia de una palabra al final de la caden

Notapor seafree » 2020-08-27 15:10 @674

POR FIN ENCONTRÉ EL ERROR: ERA UN ESPACIO AL FINAL DE LA CADENA :(
seafree
Perlero nuevo
Perlero nuevo
 
Mensajes: 296
Registrado: 2012-08-10 11:26 @518


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados