• Publicidad

Espacio en un string

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Espacio en un string

Notapor jairo15 » 2016-10-06 13:07 @588

¿Cómo se pueden quitar [] que estén vacíos en el siguiente código?:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use selectorFrases;
  2. use separadorFrases;
  3. open( my $ARCHIVO, '<', "frases.txt" )
  4.     or die "No se encontro ese archivo";
  5.  
  6. my $frase           = $palabraAleatoria;
  7. my $longitudPalabra = length($frase) - 1;
  8.  
  9. for my $i ( 1 .. $longitudPalabra ) {
  10.  
  11.     if ( $palabra[$i] =~ /\s/ ) {
  12.         print "chr(32)";
  13.     }
  14.  
  15. }
  16. for ( split //, $frase ) {
  17.     print "[$_]";
  18.  
  19. }
  20.  
  21. print "\n";
  22.  
  23. <>;
  24.  
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Lo que hace el programa es agarrar palabras de un .txt para separarlas e imprimir letra por letra dentro de '[]', pero al ser frases tienen espacio(s). Lo que quiero es saber cómo quitar los corchetes que no tienen una letra. En el código anterior usé el chr(32) porque en ASCII es un espacio pero sigue sin funcionar.
Última edición por explorer el 2016-10-06 15:23 @682, editado 1 vez en total
Razón: Formateado de código con Perltidy
jairo15
Perlero nuevo
Perlero nuevo
 
Mensajes: 31
Registrado: 2016-09-11 13:27 @602

Publicidad

Re: Espacio en un string

Notapor explorer » 2016-10-06 15:25 @684

Insertar esta línea:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.     next if $_ eq ' ';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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

Re: Espacio en un string

Notapor jairo15 » 2016-10-06 15:46 @699

¿En qué parte del código?
¿Dentro del if() o del for()?

Porque ya intenté ambos y sigue igual.
jairo15
Perlero nuevo
Perlero nuevo
 
Mensajes: 31
Registrado: 2016-09-11 13:27 @602

Re: Espacio en un string

Notapor explorer » 2016-10-07 11:56 @539

Yo creo que el problema está en

$palabra[$i] =~ /\s/

¿Qué pretendes ahí? Estoy sospechando que no hace lo que quieres que haga.

Aquí hay otro ejemplo, de lo que creo que quieres hacer:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl
  2. use utf8;                               # hay caracteres utf8 en este código
  3. use open IO => qw(:utf8 :std);          # vamos a leer y escribir en utf8
  4.  
  5. # Leemos las frases
  6. my @frases;
  7.  
  8. while (<DATA>) {
  9.     push @frases, $_;
  10. }
  11.  
  12. for my $frase (@frases) {
  13.  
  14.     for my $letra (split //, $frase) {
  15.  
  16.         next if $letra =~ /\W/;         # salta a la siguiente si no es letra
  17.  
  18.         print "[$letra]";
  19.     }
  20.  
  21.     print "\n";
  22. }
  23.  
  24. __DATA__
  25. En un lugar de la Mancha, de cuyo nombre no quiero acordarme, no ha mucho
  26. tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua,
  27. rocín flaco y galgo corredor. Una olla de algo más vaca que carnero, salpicón
  28. las más noches, duelos y quebrantos los sábados, lentejas los viernes, algún
  29. palomino de añadidura los domingos, consumían las tres partes de su hacienda.
  30. El resto della concluían sayo de velarte, calzas de velludo para las fiestas
  31. con sus pantuflos de lo mismo, los días de entre semana se honraba con su
  32. vellori de lo más fino. Tenía en su casa una ama que pasaba de los cuarenta, y
  33. una sobrina que no llegaba a los veinte, y un mozo de campo y plaza, que así
  34. ensillaba el rocín como tomaba la podadera. Frisaba la edad de nuestro hidalgo
  35. con los cincuenta años, era de complexión recia, seco de carnes, enjuto de
  36. rostro; gran madrugador y amigo de la caza. Quieren decir que tenía el
  37. sobrenombre de Quijada o Quesada (que en esto hay alguna diferencia en los
  38. autores que deste caso escriben), aunque por conjeturas verosímiles se deja
  39. entender que se llama Quijana; pero esto importa poco a nuestro cuento; basta
  40. que en la narración dél no se salga un punto de la verdad.
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

La salida es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
[E][n][u][n][l][u][g][a][r][d][e][l][a][M][a][n][c][h][a][d][e][c][u][y][o][n][o][m][b][r][e][n][o][q][u][i][e][r][o][a][c][o][r][d][a][r][m][e][n][o][h][a][m][u][c][h][o]
[t][i][e][m][p][o][q][u][e][v][i][v][í][a][u][n][h][i][d][a][l][g][o][d][e][l][o][s][d][e][l][a][n][z][a][e][n][a][s][t][i][l][l][e][r][o][a][d][a][r][g][a][a][n][t][i][g][u][a]
[r][o][c][í][n][f][l][a][c][o][y][g][a][l][g][o][c][o][r][r][e][d][o][r][U][n][a][o][l][l][a][d][e][a][l][g][o][m][á][s][v][a][c][a][q][u][e][c][a][r][n][e][r][o][s][a][l][p][i][c][ó][n]
[l][a][s][m][á][s][n][o][c][h][e][s][d][u][e][l][o][s][y][q][u][e][b][r][a][n][t][o][s][l][o][s][s][á][b][a][d][o][s][l][e][n][t][e][j][a][s][l][o][s][v][i][e][r][n][e][s][a][l][g][ú][n]
[p][a][l][o][m][i][n][o][d][e][a][ñ][a][d][i][d][u][r][a][l][o][s][d][o][m][i][n][g][o][s][c][o][n][s][u][m][í][a][n][l][a][s][t][r][e][s][p][a][r][t][e][s][d][e][s][u][h][a][c][i][e][n][d][a]
[E][l][r][e][s][t][o][d][e][l][l][a][c][o][n][c][l][u][í][a][n][s][a][y][o][d][e][v][e][l][a][r][t][e][c][a][l][z][a][s][d][e][v][e][l][l][u][d][o][p][a][r][a][l][a][s][f][i][e][s][t][a][s]
[c][o][n][s][u][s][p][a][n][t][u][f][l][o][s][d][e][l][o][m][i][s][m][o][l][o][s][d][í][a][s][d][e][e][n][t][r][e][s][e][m][a][n][a][s][e][h][o][n][r][a][b][a][c][o][n][s][u]
[v][e][l][l][o][r][i][d][e][l][o][m][á][s][f][i][n][o][T][e][n][í][a][e][n][s][u][c][a][s][a][u][n][a][a][m][a][q][u][e][p][a][s][a][b][a][d][e][l][o][s][c][u][a][r][e][n][t][a][y]
[u][n][a][s][o][b][r][i][n][a][q][u][e][n][o][l][l][e][g][a][b][a][a][l][o][s][v][e][i][n][t][e][y][u][n][m][o][z][o][d][e][c][a][m][p][o][y][p][l][a][z][a][q][u][e][a][s][í]
[e][n][s][i][l][l][a][b][a][e][l][r][o][c][í][n][c][o][m][o][t][o][m][a][b][a][l][a][p][o][d][a][d][e][r][a][F][r][i][s][a][b][a][l][a][e][d][a][d][d][e][n][u][e][s][t][r][o][h][i][d][a][l][g][o]
[c][o][n][l][o][s][c][i][n][c][u][e][n][t][a][a][ñ][o][s][e][r][a][d][e][c][o][m][p][l][e][x][i][ó][n][r][e][c][i][a][s][e][c][o][d][e][c][a][r][n][e][s][e][n][j][u][t][o][d][e]
[r][o][s][t][r][o][g][r][a][n][m][a][d][r][u][g][a][d][o][r][y][a][m][i][g][o][d][e][l][a][c][a][z][a][Q][u][i][e][r][e][n][d][e][c][i][r][q][u][e][t][e][n][í][a][e][l]
[s][o][b][r][e][n][o][m][b][r][e][d][e][Q][u][i][j][a][d][a][o][Q][u][e][s][a][d][a][q][u][e][e][n][e][s][t][o][h][a][y][a][l][g][u][n][a][d][i][f][e][r][e][n][c][i][a][e][n][l][o][s]
[a][u][t][o][r][e][s][q][u][e][d][e][s][t][e][c][a][s][o][e][s][c][r][i][b][e][n][a][u][n][q][u][e][p][o][r][c][o][n][j][e][t][u][r][a][s][v][e][r][o][s][í][m][i][l][e][s][s][e][d][e][j][a]
[e][n][t][e][n][d][e][r][q][u][e][s][e][l][l][a][m][a][Q][u][i][j][a][n][a][p][e][r][o][e][s][t][o][i][m][p][o][r][t][a][p][o][c][o][a][n][u][e][s][t][r][o][c][u][e][n][t][o][b][a][s][t][a]
[q][u][e][e][n][l][a][n][a][r][r][a][c][i][ó][n][d][é][l][n][o][s][e][s][a][l][g][a][u][n][p][u][n][t][o][d][e][l][a][v][e][r][d][a][d]
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

El preámbulo sobre utf8 es necesario porque mi codigo está escrito así, y porque vamos a leer de archivos en utf8 (en este caso, DATA), y queremos que a la salida siguen siendo utf8 (mi terminal está así también).

La clave del filtrado está en la línea 16. Si la $letra corresponde con el patrón '\W', entonces es que se trata de un carácter que NO es alfanumérico -espacios, caracteres de puntuación, y miles, y miles de caracteres más- y por lo tanto, no lo sacaremos entre corchetes.
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 Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados