Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Desplegar texto

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico
Mensaje Lun Sep 15, 2008 11:38 am
tlmejia
Perlero Nuevo
Perlero Nuevo
Registrado: 27 Ago 2008
Mensajes: 18
Desplegar texto Responder citando

Hola, buenas tardes. Pues tengo una duda en cómo hacer lo siguiente: tengo un programa que devuelve los archivos que coincidan con una búsqueda dada. Los archivos que siempre regresa o comienzan con 'T' mayúscula o con 'S' mayúscula, no hay otra. Lo que quiero hacer es decirle que si los archivos que regresa comienzan con 'S' despliegue un letrero que diga "hojas de seguridad" y posteriormente ponga los archivos que tienen 'S', de lo contrario desplegar la leyenda "hojas técnicas" y despliegue los archivos que comienzan con 'T'. Estoy haciendo algo así pero no me está funcionando:

Perl:
my @matches = fgrep { /$query/ } glob('C:\AppServ\www\pdf\txt\*.txt');
    if (@matches =~ /^T/ ){
         print qq (<a class="style1">HOJAS TÉCNICAS</a><br/>\n);
        }
        else {
         print qq (<a class="style1" align="center">HOJAS DE SEGURIDAD</a><br/>\n);
        }
   
    for my $f (@matches) {
                       
      if ($f->{count}) {   
.......


¡¡Agradezco de antemano su ayuda!!
¡¡Buen día!!
Mensaje Lun Sep 15, 2008 12:13 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4140
Ubicación: Valladolid, España
Responder citando

Debes hacer la comprobación sobre uno de los elementos. No puedes compararlos sobre todos:

Perl:
if ($matches[0]->{filename} =~ /^T/ ){


Y me parece que la expresión regular está mal... seguro que los nombres de los ficheros viene con todo el camino que le has puesto a glob().
Mensaje Lun Sep 15, 2008 2:54 pm
tlmejia
Perlero Nuevo
Perlero Nuevo
Registrado: 27 Ago 2008
Mensajes: 18
Responder citando

De hecho, sí me percaté que sigue trayendo toda la ruta, pero posteriormente escapo todos los signos, me corre en el servidor donde tengo la aplicación pero ahorita lo tengo local porque como estoy haciendo pruebas me sale ese problema nuevamente Question

Perl:
my @matches = fgrep { /$query/ } glob('C:\AppServ\www\pdf\*.txt');
    for my $f (@matches) {
        if ($f->{count}) {   
                         
        my $busfinal = $f->{filename};   
        $busfinal =~ /([^\/\/]+)\.txt/;
        #print $busfinal;
        $busfinal = '$1.pdf';
       
        #print "<img src='/mexico/imagenes/pdf_conv.gif'>\n"; 
        print qq(<a href="$busfinal" class="style2">$busfinal</a><br/>\n);
    }
}
Mensaje Lun Sep 15, 2008 4:19 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4140
Ubicación: Valladolid, España
Responder citando

Se podría hacer una expresión regular como esta:
Perl:
m{pdf/(.).+?.txt}
para capturar la primera letra del nombre del fichero... excepto si los ficheros no están dentro de una carpeta pdf/.
Mensaje Mie Sep 17, 2008 9:09 am
tlmejia
Perlero Nuevo
Perlero Nuevo
Registrado: 27 Ago 2008
Mensajes: 18
Responder citando

Ok, perfecto, haré una prueba para ver eso, sólo una duda, ¿cómo puedo escapar este signo "/"? porque al momento de imprimir mi resultado me aparece toda la ruta como en esto:

C:\AppServ\www\pdf\TA9.Lm0504Busan85.pdf

Pero el link al momento de pasar el mouse por éste, es el siguiente:

file:///C:/AppServ/www/pdf/TA9.Lm0504Busan85.pdf

y la expresión donde estoy "escapando" eso es la siguiente:

Perl:
$busfinal =~ /([^\/\/]+)\.txt/;


Pero no lo hace. Question , ¡¡Gracias de antemano!!
Mensaje Mie Sep 17, 2008 1:07 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4140
Ubicación: Valladolid, España
Responder citando

Esa expresión regular no está "escapando" nada. Solo está buscando una concordancia: el nombre del fichero menos la extensión '.txt'. Si lo encuentra, lo guarda en '$1'.

Creo que ya te respondí a esto antes. En ese código se busca el nombre del fichero de la manera que comentas, y luego creo el enlace del destinatario, poniéndole la nueva extensión.

De todas formas, para escapar caracteres extraños, siempre se suele poner un '\' delante de ellos.
Mensaje Mie Sep 17, 2008 1:27 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4140
Ubicación: Valladolid, España
Responder citando

humm...

Yo te propuse
Perl:
/([^\\]+)\.txt/

porque el camino al fichero contiene '\'. Por eso ponemos '\\', para escaparlo dentro de la expresión regular.

Ahora bien, tu pones
Perl:
/([^\/\/]+)\.txt/

que lo que quiere decir es que buscas algo que no sea '/'. Y lo repites dos veces.
Eso no me concuerda con nada del camino del fichero.

A ver... si $busfinal contiene 'C:\AppServ\www\pdf\TA9.Lm0504Busan85.txt', entonces,
Perl:
$busfinal'C:\AppServ\www\pdf\TA9.Lm0504Busan85.txt';
$busfinal =~ /([^\\]+)\.txt/;
print "$1"; # $1 contiene TA9.Lm0504Busan85


Creo que eso es lo que te pasa...
Publicar nuevo tema   Responder al tema    Foros de discusión -> Básico Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group