🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#1415
Author: F
Date: Mon, 12 Dec 2005 05:11
31 lines
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
#1416
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Mon, 12 Dec 2005 05:54
42 lines
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
#1420
Author: gamo
Date: Mon, 12 Dec 2005 11:50
18 lines
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
#1427
Author: David Serrano (Hue-Bond)
Date: Fri, 16 Dec 2005 13:54
40 lines
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
#1431
Author: David Serrano (Hue-Bond)
Date: Wed, 21 Dec 2005 16:17
10 lines
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