Thread View: es.comp.os.linux.programacion
5 messages
5 total messages
Started by F
Mon, 12 Dec 2005 05:11
Rutas de directorios dentro de expresiones regulares en perl
Author: F
Date: Mon, 12 Dec 2005 05:11
Date: Mon, 12 Dec 2005 05:11
31 lines
2145 bytes
2145 bytes
Tengo una seria de cadenas, en formato windows (Esto es con el separador de directorios, con la barra \ en lugar del /) `Por ejemplo C:\prueba\prueba\otracosa\otracosa\fichero.txt que se obtiene, directamente con un readdir bien, yo quiero sustuir los primeros directorios por ejemplo quitar "C:\prueba\prueba\" y dejar solo "otracosa\otracosa\fichero.txt" Para eso podria hacer $dirquitar= "C:\\prueba\\prueba\\"; $direntrada="C:\\prueba\\prueba\\otracosa\\otracosa\\fichero.txt"; $direntrada=~ s/^$dirquitar/$direntrada/gi; �que pasa?, que no funciona por que $dirquitar, encuntra caracteres \, que interepra como secuencias de escape al analizar la expresion regular, y no los toma literales, y me gustaria evitar eso �alguna idea? Nota: No vale con poner en el codigo fuente $dirquitar= "C:\\\\prueba\\\\prueba\\\\"; Por que es $diractual no va dentro del codigo fuente, sino que se le de la linea de parametros. Un saludo, espero que aunque sea un programa para windows, me puedan ayudar
Re: Rutas de directorios dentro de expresiones regulares en perl
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Mon, 12 Dec 2005 05:54
Date: Mon, 12 Dec 2005 05:54
42 lines
2639 bytes
2639 bytes
Hola "F" <esnewsfQuItAeStO@EsToCaMbIeNyahoo.es> el Mon, 12 Dec 2005 05:11:19 GMT escribiste: > Tengo una seria de cadenas, en formato windows (Esto es con el separador de > directorios, con la barra \ en lugar del /) > > `Por ejemplo > > C:\prueba\prueba\otracosa\otracosa\fichero.txt > > que se obtiene, directamente con un readdir > > bien, yo quiero sustuir los primeros directorios por ejemplo quitar > "C:\prueba\prueba\" y dejar solo "otracosa\otracosa\fichero.txt" > > Para eso podria hacer > > $dirquitar= "C:\\prueba\\prueba\\"; > $direntrada="C:\\prueba\\prueba\\otracosa\\otracosa\\fichero.txt"; > > $direntrada=~ s/^$dirquitar/$direntrada/gi; > > ¿que pasa?, que no funciona por que $dirquitar, encuntra caracteres \, que > interepra como secuencias de escape al analizar la expresion regular, y no > los toma literales, y me gustaria evitar eso ¿alguna idea? sustituir los \ de entrada por alguna otra cosa (perldoc tr), procesar y después recuperar los \ originales a partir de la *otra cosa* la otra cosa podría ser \\, / o cualquier cosa que no esperes encontrarte en las entradas otra posibilidad, para este caso, es usar length, substr y eq para determinar la longitud de $dirquitar, separar direntrada en sus dos partes y comparar los strings. -- Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es> PGP key 2861C704 --- F206 5671 6789 425D 111C 1302 214F 1934 2861 C704
Re: Rutas de directorios dentro de expresiones regulares en perl
Author: gamo
Date: Mon, 12 Dec 2005 11:50
Date: Mon, 12 Dec 2005 11:50
18 lines
1688 bytes
1688 bytes
This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323328-1769816919-1134388215=:14207 Content-Type: TEXT/PLAIN; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: QUOTED-PRINTABLE On Mon, 12 Dec 2005, F wrote: > =BFque pasa?, que no funciona por que $dirquitar, encuntra caracteres \, = que > interepra como secuencias de escape al analizar la expresion regular, y n= o > los toma literales, y me gustaria evitar eso =BFalguna idea? En vez de usar " se usa ' Saludos --8323328-1769816919-1134388215=:14207--
Re: Rutas de directorios dentro de expresiones regulares en perl
Author: David Serrano (Hue-Bond)
Date: Fri, 16 Dec 2005 13:54
Date: Fri, 16 Dec 2005 13:54
40 lines
2138 bytes
2138 bytes
F, lun20051212@06:11:19(CET):
>
> C:\prueba\prueba\otracosa\otracosa\fichero.txt
> bien, yo quiero sustuir los primeros directorios por ejemplo quitar
> "C:\prueba\prueba\" y dejar solo "otracosa\otracosa\fichero.txt"
$ perl
my $file = 'C:\\prueba\\prueba\\otracosa\\otracosa\\fichero.txt';
my ($stripped) = $file =~ m/(?:[^\\]+\\){3}(.*)/;
print "$stripped\n";
__END__
otracosa\otracosa\fichero.txt
Si además quieres comerte cada vez un número distinto de directorios padre,
es trivialmente hacible:
$ perl
my $eat = 2;
my $file = 'C:\\prueba\\prueba\\otracosa\\otracosa\\fichero.txt';
my ($stripped) = $file =~ m/(?:[^\\]+\\){$eat}(.*)/;
print "$stripped\n";
__END__
> Nota: No vale con poner en el codigo fuente
>
> $dirquitar= "C:\\\\prueba\\\\prueba\\\\";
Yo me he visto obligado a hacer '\\' para conseguir la cadena correcta:
$ perl
print my $file = 'C:\\prueba\\', $/;
__END__
C:\prueba\
--
David Serrano
Re: Rutas de directorios dentro de expresiones regulares en perl
Author: David Serrano (Hue-Bond)
Date: Wed, 21 Dec 2005 16:17
Date: Wed, 21 Dec 2005 16:17
10 lines
1590 bytes
1590 bytes
David Serrano (Hue-Bond), vie20051216@14:54:19(CET):
>
> my ($stripped) = $file =~ m/(?:[^\\]+\\){3}(.*)/;
Me cuentan por aquí que existe un módulo llamado File::Basename para hacer
esta clase de cosas. Seguro que es más apropiado que reinventar la rueda.
--
David Serrano
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads