Perl en Español

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

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

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Lun Mar 27, 2006 4:17 am
daniCompaq
Perlero Nuevo
Perlero Nuevo
Registrado: 16 Mar 2006
Mensajes: 7
Una palabra o signo de puntuación por línea Responder citando

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
Mensaje Lun Mar 27, 2006 4:52 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4125
Ubicación: Valladolid, España
Responder citando

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
}
Mensaje Mie Mar 29, 2006 4:25 am
daniCompaq
Perlero Nuevo
Perlero Nuevo
Registrado: 16 Mar 2006
Mensajes: 7
no me funciona! :( Responder citando

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!!
Mensaje Mie Mar 29, 2006 9:21 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

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
Mensaje Vie Mar 31, 2006 4:46 am
daniCompaq
Perlero Nuevo
Perlero Nuevo
Registrado: 16 Mar 2006
Mensajes: 7
Responder citando

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! Very Happy
Mensaje Vie Mar 31, 2006 5:13 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4125
Ubicación: Valladolid, España
Responder citando

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;
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group