Lun Mar 27, 2006 4:17 am
|
 |
daniCompaq
Perlero Nuevo

|
Registrado: 16 Mar 2006
Mensajes: 7
|
|
| Una palabra o signo de puntuación por línea |
|
|
Buenos días,
A ver, tengo un fichero con un texto en una variable y necesito pasarlo al formato de una palabra por línea. Concretamente, necesito cada palabra y cada signo de puntuación en una línea distinta,
alguna ayudita? gracias de antemano!  |
|
|
|
Lun Mar 27, 2006 4:52 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
|
|
|
|
|
| Código: |
# Bucle por todo(g) el texto,
# recolectando conjuntos de palabras (\w+) y no palabras (\w+)
while ( $txt =~ /(\w+|\W+)/g ) {
chomp $1; # Quitamos los retornos de carro
print "$1\n" # Pintamos el conjunto
unless $1 =~ /\s+/; # siempre y cuando no sea espacio en blanco
} |
|
|

Mie Mar 29, 2006 4:25 am
|
 |
daniCompaq
Perlero Nuevo

|
Registrado: 16 Mar 2006
Mensajes: 7
|
|
| no me funciona! :( |
|
|
Con el codigo éste. me da un error: dice que a la línea del Chomp sólo tengo permisos de lectura -read only value attempted
| Código: |
sub tractarCorpus
{
print "entro a tractarCorpus\n";
# Bucle por todo(g) el texto,
# recolectando conjuntos de palabras (\w+) y no palabras (\w+)
while ( $corpus =~ /(\w+|\W+)/g )
{
chomp $1; # Quitamos los retornos de carro
print "$1\n" # Pintamos el conjunto
unless $1 =~ /\s+/; # siempre y cuando no sea espacio en blanco
}
} |
Antes de esto solo he hecho:
| Código: |
sub openFile
{
open my $file, '<', "entrada.txt" or die("No se pudo abrir archivo");
$corpus = do
{ local $/; <$file>
};
close $file;
}
$nomentrada ="entrada.txt"
&openFile($nomentrada);
#print "el corpus es $corpus\n";
&tractarCorpus($corpus); |
gracias!! |
|

Mie Mar 29, 2006 9:21 am
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
|
|
|
|
|
Hola:
No es buen hábito de programación intentar hacer modificaciones con las variables especiales $1,$2,$3, etc pues recuerda que estás pueden cambiar en cualquier momento.
Tu código lo pondría como:
| Código: |
sub tractarCorpus
{
print "entro a tractarCorpus\n";
# Bucle por todo(g) el texto,
# recolectando conjuntos de palabras (\w+) y no palabras (\w+)
while ( $corpus =~ /(\w+|\W+)/g )
{
my $valor = $1; #Recolectamos inmediatamante $1
chomp $valor; # Quitamos los retornos de carro
next if $valor =~ /\s+/; # siempre y cuando no sea espacio en blanco
print "$valor\n"; # Pintamos el conjunto
}
}
|
Saludos |
|
Vie Mar 31, 2006 4:46 am
|
 |
daniCompaq
Perlero Nuevo

|
Registrado: 16 Mar 2006
Mensajes: 7
|
|
|
|
|
Ok, una última cuestión: desde dentro de la función, puedo hacer una pipe y copiar las palabras en éste nuevo formato (de un token por línea) a la variable $corpus ?
gracias!  |
|
Vie Mar 31, 2006 5:13 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4084
Ubicación: Valladolid, España
|
|
|
|
|
Antes del bucle creas una nueva variable.
Dentro del bucle, por cada iteración, agregas $valor a la $salida:
Al final del bucle, copias una variable en otra:
|
|
Powered by phpBB © 2001, 2005 phpBB Group
|