• Publicidad

Una palabra o signo de puntuación por línea

¿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.

Una palabra o signo de puntuación por línea

Notapor daniCompaq » 2006-03-27 05:17 @262

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! :wink:
daniCompaq
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2006-03-16 07:02 @334

Publicidad

Re: Una palabra o signo de puntuación por línea

Notapor explorer » 2006-03-27 05:52 @286

Código: Seleccionar todo
# 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
}
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

no me funciona! :(

Notapor daniCompaq » 2006-03-29 05:25 @267

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: Seleccionar todo
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: Seleccionar todo
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!!
daniCompaq
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2006-03-16 07:02 @334

Notapor kidd » 2006-03-29 10:21 @473

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: Seleccionar todo
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
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor daniCompaq » 2006-03-31 05:46 @282

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! :D
daniCompaq
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2006-03-16 07:02 @334

Re: Una palabra o signo de puntuación por línea

Notapor explorer » 2006-03-31 06:13 @300

Antes del bucle creas una nueva variable.
my $salida = '';
Dentro del bucle, por cada iteración, agregas $valor a la $salida:
$salida .= "$valor\n";
Al final del bucle, copias una variable en otra:
$corpus = $salida;
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 0 invitados