Página 1 de 1

Espacio en un string

NotaPublicado: 2016-10-06 13:07 @588
por jairo15
¿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.

Re: Espacio en un string

NotaPublicado: 2016-10-06 15:25 @684
por explorer
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

Re: Espacio en un string

NotaPublicado: 2016-10-06 15:46 @699
por jairo15
¿En qué parte del código?
¿Dentro del if() o del for()?

Porque ya intenté ambos y sigue igual.

Re: Espacio en un string

NotaPublicado: 2016-10-07 11:56 @539
por explorer
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.002 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.